分配方法在RSpec中返回nil

时间:2016-11-18 09:56:38

标签: ruby-on-rails ruby rspec

我正在使用模拟和存根进行测试,但我的输出中一直没有。我不确定它是否是分配方法的问题。我还能知道如何调试这类问题吗?我正在使用rspec-rails 3.5.2谢谢。

失败的测试:

describe 'guest user' do
   describe 'GET index' do
     let(:achievement) { instance_double(Achievement) }

     before do
       allow(Achievement).to receive(:get_public_achievements) { [achievement] }
     end

     it 'assigns public achievements to template' do
       get :index
       expect(assigns(achievement)).to eq([achievement])
     end
   end
end

控制器中的索引操作

 def index
   @achievements = Achievement.get_public_achievements
 end

成就模式中的get_public_achievements

  def self.get_public_achievements
     // empty method it's fine
  end

错误:

1) AchievementsController guest user GET index assigns public achievements to template
 Failure/Error: expect(assigns(achievement)).to eq([achievement])

   expected: [#<InstanceDouble(Achievement) (anonymous)>]
        got: nil

   (compared using ==)

1 个答案:

答案 0 :(得分:2)

assigns由符号键控。应该是

expect(assigns(:achievements)).to eq([achievement])