Ruby 仅强制严格RSpec DSL
作为一个天真的程序员,我在测试中犯了一个巨大的错误:Ruby 仅强制严格RSpec DSL,ruby,rspec,Ruby,Rspec,作为一个天真的程序员,我在测试中犯了一个巨大的错误: it_behaves_like 'a Database' do def build_content # ... end end 在一些随机错误和使用共享规范添加更多测试之后,我意识到这样的代码从一开始就是错误的,并且消耗了一些有价值的测试。它应该一直是: it_behaves_like 'a Database' do before :all do def build_content # ...
it_behaves_like 'a Database' do
def build_content
# ...
end
end
在一些随机错误和使用共享规范添加更多测试之后,我意识到这样的代码从一开始就是错误的,并且消耗了一些有价值的测试。它应该一直是:
it_behaves_like 'a Database' do
before :all do
def build_content
# ...
end
end
end
在这次“aha moment”让我对RSpec的了解更进一步,现在我想知道为什么任何人都应该在RSpec DSL名称空间中编写普通的ruby代码,我真的只想知道一件事:
如何在我的规范中强制使用严格的RSpec DSL,使我的begin/let/it块之外的任何非RSpec的随机ruby代码都是非法的
例如,在我上面的代码中,函数build_content就是我所说的随机ruby代码。第一次在DSL名称空间中声明它时,只应该使用RSpec函数。为什么要编写普通的ruby代码…-因为,你知道,RSpec DSL是普通的ruby代码所以我不知道怎样才能把两者区分开来。如果您使用minitest,您就不会有这样的困惑我知道。。。但是minitest有更多的Ruby代码-P我使用RSpec的原因是它的DSL。即使在实践中它仍然是Ruby代码,我还是希望在那些只需要DSL的领域中使用DSL。那么?只是不要在那里编写常规方法。在ruby中很难实施这种策略。这是到目前为止我得到的唯一答案:考虑到通常DSL是通过某种类型的eval实现的,我对强制实施“严格DSL”模式的希望很低。即便如此,我真的很喜欢这种设计策略,让明显愚蠢的事情,以一种清晰而明显的方式失败。