我的application controller
中有方法,想在任何地方使用它
在我的集成规范中。
我不想在每个规范中添加它的方法
目前我使用
allow_any_instance_of(ApplicationController).to receive(:set_seo).and_return('seo_text')
但不方便。
我该怎么做?
答案 0 :(得分:1)
在您的Rspec配置中,您可以为:
配置前后块套件前的
之前
每个
之前 每次后
毕竟
套件
之后
https://www.relishapp.com/rspec/rspec-core/v/2-2/docs/hooks/before-and-after-hooks
按顺序。
我建议:
RSpec.configure do |config|
config.before(:suite) do
allow_any_instance_of(ApplicationController).to receive(:set_seo).and_return('seo_text')
end
end
编辑:
before(:suite)
似乎可能会导致问题。
如果它不起作用,请使用before(:each)
答案 1 :(得分:0)
我会创建一个spec_helper_integration
文件,并在其中放置特定于集成规范的功能。
您应该已经将require 'rails_helper'
放在所有规格的顶部。在您的集成规范的顶部:
require 'rails_helper'
require 'spec_helper_integration'
然后在与spec_helper_integration.rb
文件相同的文件夹中创建rails_helper.rb
文件。
spec_helper_integration:
#I'm taking a guesstimate as to your integration spec configuration, but it's
#likely something like the following line:
#don't also have this in your spec_helper or rails_helper files:
require 'capybara/rails'
#configure your integration specs:
RSpec.configure do |config|
config.before(:each) do
allow_any_instance_of(ApplicationController).to receive(:set_seo).and_return('seo_text')
end
end
将代码隔离到仅需要的位置是一种很好的做法;通过这样做,您的ApplicationController方法存根仅在集成规范的运行期间激活,而不是您的其他规范,例如单元或控制器规范。
继续前进,任何进一步的特定于集成规范的代码也应该只放在spec_helper_integration文件中。