gpt4 book ai didi

testing - 调用我在 before block 中测试的方法是不好的做法吗?

转载 作者:行者123 更新时间:2023-11-28 20:31:12 24 4
gpt4 key购买 nike

# the first
it "should render China's jobs page with country_name china" do
get 'show', country: 'china'
expect(assigns(:title)).to eq("#{location.country} Tech Jobs")
expect(response).to be_success
end

# the second
context "with country name" do
before { get 'show', country: 'china' }
it { expect(assigns(:title)).to eq("#{location.country} Tech Jobs") }
it { expect(response).to be_success }
end

你觉得哪个更好?如果 before { get 'show' } 不是一个坏习惯,我更喜欢第二个。

最佳答案

我不会说这是一种不好的做法,但它确实有一些缺点:

  • 速度较慢。在第二种情况下,它有 2 个示例,每个示例都运行 get 'show', country: 'china' -- 当 get 'show' 时会导致明显的缓慢本身就很慢。
  • 它生成的文档输出(至少对我而言)并没有很好地描述行为。比较这两种情况的 --format doc 输出。
  • 这使得向您将来可能添加的其他示例添加额外设置变得更加困难。考虑将来是否需要测试需要插入数据库中的特定记录才能正常工作的案例。因为被测试的操作 (get 'show') 是在 before block 中而不是在示例主体中,所以您无法轻松地向需要的示例添加额外的设置它。 (当然,您可以将额外的设置添加到 before block 本身,但这会加剧缓慢问题)。

使用 before block 也有一些好处。它使遵循“每个示例一个期望”的准则变得容易。这反过来会给您单独的分配和响应状态期望的失败或通过示例,例如,这可以更清楚地说明失败的原因。

您使用哪种取决于您要做出的权衡。我个人倾向于你的第一个例子(没有 before block )。

附带说明一下,如果我要使用后一种形式,我会使用 specify 别名(而不是 it),因为我喜欢只使用 it 当 doc 字符串或匹配器作为 it 的英语表达式读起来很好时:

specify { expect(assigns(:title)).to eq("#{location.country} Tech Jobs") }
specify { expect(response).to be_success }

关于testing - 调用我在 before block 中测试的方法是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24454569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com