Ruby on rails Assigns方法在RSpec中返回nil

Ruby on rails Assigns方法在RSpec中返回nil,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,我正在用mock和stub进行测试,但我的输出一直是零。我不确定这是否是分配方法的问题。我还可以知道我应该如何调试这种问题吗?我使用的是rspec rails 3.5.2,谢谢 失败的测试: describe 'guest user' do describe 'GET index' do let(:achievement) { instance_double(Achievement) } before do allow(Achievement).to r

我正在用mock和stub进行测试,但我的输出一直是零。我不确定这是否是分配方法的问题。我还可以知道我应该如何调试这种问题吗?我使用的是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
在成就模型中获取公共成就

  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)成就管理员来宾用户获取索引将公共成就分配给模板
失败/错误:expect(分配(成就))给eq([成就])
期望值:[#]
得:零
(使用==进行比较)

分配
由符号键入。应该是

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

分配
由符号设置关键帧。应该是

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

谢谢,这解决了问题。然而,我仍然不确定何时使用多元形式或单数形式。有约定吗?@JeffreyYong:当然,有约定。你知道支票是做什么的吗?它断言一些关于您在控制器中设置的变量的信息。因此,请使用您在控制器中设置的任何名称。很抱歉这个天真的问题,我对rails编程非常陌生。非常感谢。这就把事情弄清楚了。我实际上在读迈克尔·哈特尔的书。它确实很详细,但我记不清我读过的所有内容。我试着自己做更多的辅助项目来记住我从书中读到的东西。非常感谢。所以只允许我在5分钟后接受。我现在已经做了:)谢谢!谢谢,这解决了问题。然而,我仍然不确定何时使用多元形式或单数形式。有约定吗?@JeffreyYong:当然,有约定。你知道支票是做什么的吗?它断言一些关于您在控制器中设置的变量的信息。因此,请使用您在控制器中设置的任何名称。很抱歉这个天真的问题,我对rails编程非常陌生。非常感谢。这就把事情弄清楚了。我实际上在读迈克尔·哈特尔的书。它确实很详细,但我记不清我读过的所有内容。我试着自己做更多的辅助项目来记住我从书中读到的东西。非常感谢。所以只允许我在5分钟后接受。我现在已经做了:)谢谢!