有可能做这样的事情吗?
module MyHelper before (:each) do allow(Class).to receive(:method).and_return(true) end end
然后在测试中,我可以执行以下操作:
RSpec.describe 'My cool test' do include MyHelper it 'Tests a Class Method' do expect { Class.method }.to eq true end end
编辑:这将产生以下错误:
undefined method `before' for MyHelper:Module (NoMethodError)
本质上,我有一个案例,其中许多测试执行不同的操作,但是跨它们的通用模型对after_commit做出反应,最终会始终调用与API通讯的方法。我不想在全球范围内允许Class
接收,:method
因为有时我需要为特殊情况自己定义它...但是我不想不必重复我的allow / receive / and_return而是将其包装在一个通用帮助器中。 。
您可以创建一个通过元数据触发的挂钩,例如:type => :api
:
RSpec.configure do |c| c.before(:each, :type => :api) do allow(Class).to receive(:method).and_return(true) end end
在您的规格中:
RSpec.describe 'My cool test', :type => :api do it 'Tests a Class Method' do expect { Class.method }.to eq true end end
您还可以传递:type => :api
到各个it
块。