有几种情况,我的规格总是返回为真,这使得测试变得多余......
以Achievement
模型为例:
class Achievement < ActiveRecord::Base
has_many :stages
def call_name_method
name
end
def name
key
end
end
# for simplicity sake, I'm just testing a method which simply calls another method.
achievement_specs.rb
require 'rails_helper'
describe Achievement do
describe '#call_name_method' do
subject { achievement.call_name_method }
let(:achievement) { create(:achievement) }
it 'calls #name' do
expect(achievement).to receive(:name)
subject
end
end
end
此测试成功,但我可以将其更改为expect(achievement).to receive(:foobar)
,但仍然会成功,但我不会调用foobar
。
根据documentation,它是正确的语法,但它永远不会失败。这是一个错误吗?
我也尝试使用.to have_received(:call_name_method)
,但这会导致此错误:
1)Achievement#call_name_method调用#name 失败/错误:期望(成就).to has_received(:call_name_method) #期望收到call_name_method,但该对象不是间谍,或者方法没有被存根。
答案 0 :(得分:0)
问题出在 rails_helper.rb
中config.after(:each) do
DatabaseCleaner.clean
RSpec::Mocks.teardown # <-- this line was fault
end
删除该行后,规格按预期工作。虽然不需要,同事却意外地承认了这一点。
由于所有测试都取得了成功,直到现在它才引起我们的注意。