在Rspec中,我们可以像这样设置一些全局的前/后行为:
config.before(:each) {blah...}
我可以说:
config.before(:each, :type => :model) {blah...}
让此块仅与模型测试一起运行 但这不起作用:
config.before(:each, :type => [:model, :controller]) {blah...}
我必须重复两次相同的事情,一个用于模型,一个用于控制器。有没有其他方法可以做到这一点?感谢
答案 0 :(得分:6)
查看RSpec过滤器:https://www.relishapp.com/rspec/rspec-core/docs/hooks/filters
它们只匹配任意元数据,而rspec-rails会添加元数据:type => :每组测试的模型(或其他)。
所以,这个配置
config.before(:each, :type => [:model, :controller]) {blah...}
只会将测试与此元数据匹配(匹配相同的值):
describe "matching tests", :type => [:model, :controller] {blah...}
这基本上意味着您的问题的答案是否。
无论如何,你可以用这样的东西轻松地DIY它:
before_controller_and_model = lambda do
do_stuff
end
config.before(:each, :type => :model) { before_controller_and_model.call }
config.before(:each, :type => :controller) { before_controller_and_model.call }