# 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' }
不是一个不好的做法,我更喜欢第二个。
答案 0 :(得分:2)
我不会说这是一种不好的做法,但确实有一些缺点:
get 'show', country: 'china'
- 当get 'show'
本身很慢时会导致明显的缓慢。--format doc
输出。get 'show')
位于before
块而不是示例正文中,因此您无法轻松地将其他设置添加到需要它的示例中。(当然,您可以,将其他设置添加到before
块本身,但这会加剧缓慢问题。)使用before
块也有一些好处。它可以很容易地遵循每个例子中的一个期望"指南。这反过来将为您提供assigns
单独的失败或传递示例以及响应状态期望,例如,可以更清楚地确定失败的原因。
您使用哪种取决于您想要做出的权衡。我个人倾向于你的第一个例子(没有before
阻止)。
另一方面,如果我要使用后一种形式,我会使用specify
别名(而不是it
),因为我只想使用it
当doc字符串或匹配器作为it
之外的英语表达式读取时:
specify { expect(assigns(:title)).to eq("#{location.country} Tech Jobs") }
specify { expect(response).to be_success }