【发布时间】:2015-02-27 08:34:07
【问题描述】:
我刚刚在 Rspec 中发现了一些东西(在必要的头撞墙之后),我希望有人能阐明这一点。我认为这涉及我对 Rspec 的subject! 的误解。
我的理解是subject! 将运行主题块,无论是否使用subject,并且该块将在适当的时间运行。
似乎发生的事情就是这样 - 具有奇怪的副作用,它会导致 inner subject 块在 内部 @987654325 之前运行@块。
即:
describe 'subject block' do
before { @var = nil }
describe 'Test 1: With a bang' do
subject! { @var = false }
describe 'inner describe' do
before { @var = true }
subject { @var }
it { is_expected.to be true }
end
end
describe 'Test 2: Without a bang' do
subject { @var = false }
describe 'inner describe' do
before { @var = true }
subject { @var }
it { is_expected.to be true }
end
end
end
这个结果指出了问题所在。测试 1,即在外部块中带有 subject! 的测试失败。而使用非爆炸subject 的测试 2 通过。测试 1 失败的原因是内部 before 块,其中放置了 @var = true,没有在内部 subject 之前调用,因此在实际规范之前没有调用。
这对我来说似乎是错误的。我错过了什么吗?
【问题讨论】:
标签: ruby-on-rails ruby rspec