ruby-on-rails - Rspec.config 之前(:each) except for specific :types

标签 ruby-on-rails ruby rspec

我正在尝试获取一个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/

相关文章:

ruby-on-rails - 如何模拟 RSpec 中新 ActiveRecord 对象的创建调用?

rspec - 为每次测试开始一个新的 capybara session

ruby-on-rails - 在rake任务期间记录SQL查询

ruby-on-rails - 如果我使用 Guard 和 Spork,如何在规范或功能中进行 ruby​​ 调试?

jquery - 如何将ajax数据提交到.js.erbrails

ruby-on-rails - 用于构建成就系统的 Ruby/Rails 现代工具

ruby-on-rails - Rails 使用 metasearch 和 metawhere 搜索计算字段

ruby - 在组织内共享 ruby​​ 代码

ruby-on-rails - 如何在 Rails 4 中设置自定义字符串外键?

ruby-on-rails - 使用 Rspec 测试 Sidekiq 后台作业的结果