[英]RSpec: Avoid using allow any instance of to receive
I'm working on one old part of code. 我正在处理一段旧代码。
before do
allow_any_instance_of(SportRateManager)
.to receive(:create)
.and_return(true)
end
There is Rubocop error like: Rubocop错误如:
Avoid stubbing using 'allow_any_instance_of' 避免使用'allow_any_instance_of'进行存根
I read about RuboCop::RSpec:AnyInstance and I tried to change it like bellow. 我读到了RuboCop :: RSpec:AnyInstance ,我试着像下面一样改变它。
From this 由此
before do
allow_any_instance_of(SportRateManager)
.to receive(:create)
.and_return(true)
end
To this: 对此:
let(:sport_manager) { instance_double(SportRateManager) }
before do
allow(SportRateManager).to receive(:new).and_return(sport_manager)
allow(sport_manager).to receive(:create).and_return(true)
end
And with full context: - before 完整的背景: - 之前
describe 'POST create' do
let(:sport_rate) { build(:sport_rate) }
let(:action) { post :create, sport_rate: sport_rate.attributes }
context 'when sport rate manager created the rate successfully' do
before do
allow_any_instance_of(SportRateManager)
.to receive(:create)
.and_return(true)
end
it 'returns ok status' do
action
expect(response).to have_http_status(:ok)
end
end
... - after: ...... - 之后:
describe 'POST create' do
let(:sport_rate) { build(:sport_rate) }
let(:action) { post :create, sport_rate: sport_rate.attributes }
let(:sport_manager) { instance_double(SportRateManager) }
context 'when sport rate manager created the sport successfully' do
before do
allow(SportRateManager).to receive(:new).and_return(sport_manager)
allow(sport_manager).to receive(:create).and_return(true)
end
it 'returns ok status' do
action
expect(response).to have_http_status(:ok)
end
end
But this doesn't pass the test with error: 但这并没有通过错误测试:
#<InstanceDouble(SportRateManager) (anonymous)> received unexpected message :sport_rate with (no args)
The solution was almost done. 解决方案差不多完成了。 You probably need to add build :sport_rate
before create 您可能需要在创建之前添加build :sport_rate
Sth like that 那样的
let(:sport_manager) { instance_double(SportRateManager) }
before do
allow(SportRateManager).to receive(:new).and_return(sport_manager)
allow(sport_manager).to receive(:sport_rate).and_return(build :sport_rate)
allow(sport_manager).to receive(:create).and_return(true)
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.