Rspec 错误:双重:赞助商收到意外消息:用户\u未使用\u奖励(无参数)

Rspec 错误:双重:赞助商收到意外消息:用户\u未使用\u奖励(无参数),rspec,Rspec,我进行了以下RSpec测试: describe "#users_with_unspent_rewards" do subject(:sponsor) { double(:sponsor) } let!(:reward) { double(sponsor: sponsor, cost: 300) } let!(:user) { double } before do allow(subject).to receive(:rewards).and_retu

我进行了以下RSpec测试:

describe "#users_with_unspent_rewards" do
    subject(:sponsor) { double(:sponsor) }
    let!(:reward) { double(sponsor: sponsor, cost: 300) }
    let!(:user) { double }

    before do
      allow(subject).to receive(:rewards).and_return([reward])
      allow(subject).to receive_message_chain(:users, :active).and_return([user])
      allow(subject).to receive(:any_rewards_user_can_buy?).with(user).and_return(true)
    end

    its(:users_with_unspent_rewards) { is_expected.to eq([user]) }
  end
我的意图是,方法
users\u with_unspent\u rawards
应返回未使用奖励成本大于赞助商奖励成本的任何用户

我得到的错误是:

1) Sponsor#users_with_unspent_boost_rewards users_with_unspent_boost_rewards 
     Failure/Error: its(:users_with_unspent_rewards) { is_expected.to eq([user]) }
       Double :sponsor received unexpected message :users_with_unspent_rewards with (no args)
     # ./spec/models/sponsor_spec.rb:237:in `block (3 levels) in <top (required)>'

任何帮助都将不胜感激。

事实证明,问题出在规范的第一行:

subject(:sponsor) { double(:sponsor) }
我正在测试模型。一旦我删除了该行并从奖励定义行中删除了赞助商信息,测试就通过了

经验教训:不要将模型或测试中的方法存根,只保留方法的内部

def users_with_unspent_rewards
  @users ||= users.active.select { |u| any_rewards_user_can_buy?(u) }
end
subject(:sponsor) { double(:sponsor) }