RSpec:避免使用allow any instance of to receive
RSpec: Avoid using allow any instance of to receive
我正在处理旧代码的一部分。
before do
allow_any_instance_of(SportRateManager)
.to receive(:create)
.and_return(true)
end
存在如下 Rubocop 错误:
Avoid stubbing using 'allow_any_instance_of'
我阅读了有关 RuboCop::RSpec:AnyInstance 的信息,并尝试按以下方式对其进行更改。
由此
before do
allow_any_instance_of(SportRateManager)
.to receive(:create)
.and_return(true)
end
为此:
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
以及完整的上下文:
- 之前
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
...-之后:
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
但这并没有通过错误的测试:
#<InstanceDouble(SportRateManager) (anonymous)> received unexpected message :sport_rate with (no args)
解决方案差不多完成了。您可能需要在创建
之前添加 build :sport_rate
诸如此类
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
我正在处理旧代码的一部分。
before do
allow_any_instance_of(SportRateManager)
.to receive(:create)
.and_return(true)
end
存在如下 Rubocop 错误:
Avoid stubbing using 'allow_any_instance_of'
我阅读了有关 RuboCop::RSpec:AnyInstance 的信息,并尝试按以下方式对其进行更改。
由此
before do
allow_any_instance_of(SportRateManager)
.to receive(:create)
.and_return(true)
end
为此:
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
以及完整的上下文: - 之前
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
...-之后:
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
但这并没有通过错误的测试:
#<InstanceDouble(SportRateManager) (anonymous)> received unexpected message :sport_rate with (no args)
解决方案差不多完成了。您可能需要在创建
之前添加build :sport_rate
诸如此类
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