Mar*_*a N 6 ruby rspec ruby-on-rails rubocop rubocop-rspec
我正在处理旧的代码部分。
before do
allow_any_instance_of(SportRateManager)
.to receive(:create)
.and_return(true)
end
Run Code Online (Sandbox Code Playgroud)
有Rubocop错误,例如:
避免使用'allow_any_instance_of'进行存根
我读到有关RuboCop :: RSpec:AnyInstance的内容,并试图像下面这样更改它。
由此
before do
allow_any_instance_of(SportRateManager)
.to receive(:create)
.and_return(true)
end
Run Code Online (Sandbox Code Playgroud)
对此:
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
Run Code Online (Sandbox Code Playgroud)
并具有完整的上下文:-之前
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
Run Code Online (Sandbox Code Playgroud)
...-之后:
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
Run Code Online (Sandbox Code Playgroud)
但这不会通过测试并显示错误:
#<InstanceDouble(SportRateManager) (anonymous)> received unexpected message :sport_rate with (no args)
eud*_*nia 10
解决方案差不多完成了。您可能需要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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3814 次 |
| 最近记录: |