2016-11-18 77 views
0

我正在使用mocks和stubs進行測試,但我一直在輸出中得到nil。我不確定這是否是分配方法的問題。我是否也可以知道我應該如何調試這種問題?我正在使用rspec-rails 3.5.2謝謝。RSpec中的賦值方法返回nil

失敗測試:

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 ==) 

回答

2

assigns以符號爲鍵。應該是

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

謝謝你解決了這個問題。但是,我仍然不確定何時使用複數形式或單數形式。有一個約定嗎? –

+0

@JeffreyYong:當然有一個約定。你知道什麼是分配支票嗎?它斷言你在控制器中設置的變量。因此,請使用您在控制器中設置的任何名稱。 –

+0

對不起,這個天真的問題,我很新的軌道編程。 –