我正在尝试获取一个before(:each)
block 以针对所有规范except type::feature
运行。
我让它工作的唯一方法是剪切和粘贴,并为每种类型设置单独的配置 block 。 (:type => :model
, :type => :service
等)
spec/rails_helper.rb
# To speed up tests, stub all Paperclip saving and reading to/from S3
config.before(:each, :type => :model) do
allow_any_instance_of(Paperclip::Attachment).to receive(:save).and_return(true)
end
是否有更 DRY 的方法?
最佳答案
你传递给你的前 block 的是一个'conditions hash '. RSpec 只会将 before 应用于那些符合这些条件的示例或上下文。
散列相当灵活,您可以直接执行诸如 type::model
之类的操作,但您可以使用任意名称查询任何类型的元数据。
以 filter run excluding 为例
:foo => 'bar'
:foo => /^ba/
:foo => lambda {|v| v == 'bar'}
:foo => lambda {|v,m| m[:foo] == 'bar'}
:foo
可以是任何东西,例如,类型。但它为您提供了很大的灵 active ,尤其是使用 lambda 语法可以非常具体地说明您希望在什么情况下运行您的规范。
在你的情况下你可以这样做:
config.before(:each, :type => lambda {|v| v != :feature}) do
allow_any_instance_of(Paperclip::Attachment).to receive(:save).and_return(true)
end
关于ruby-on-rails - Rspec.config 之前(:each) except for specific :types,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32655446/