2013-04-25 39 views
0

我試圖用RSpec測試我的控制器在rails中,但它不是調用我所做的一個模擬,我不知道爲什麼。RSpec模擬沒有被調用belongs_to協會

我的模型有一個用戶類,一個遊戲類和一個玩家類,它屬於一個用戶和一個遊戲。

我想測試這樣的事情

player = Player.find_by_id(params[:id]) 
if player != nil && player.user == current_user && player.game.remove_player?(player) 
    redirect_to games_url 

但我似乎無法remove_player嘲笑?正確。我正在做的幾乎是這樣的:

@player = double("player") 
Player.should_receive(:find_by_id).with(mock_player_id.to_s).and_return { @gplayer } 
@player.stub(:user).and_return(@current_user) 
fakeGame = double("game") 
@player.stub(:game).and_return(fakeGame) 
fakeGame.should_receive(:remove_player?).with(@player).and_return(true) 

我得到的錯誤說remove_player?從未被召喚過。任何想法我做錯了什麼?我無法確定它是否到達player.user == curent_user,但它調用find_by_id而不是抱怨它,所以我會想象它必須達到用戶檢查。

編輯:@current_user不等於CURRENT_USER

而且,我試圖與

fakeUser = double("user") 
@player.should_receive(:user).and_return(@current_user) 

更換3號線它給我的錯誤說:用戶不叫。

回答

1

在規範的第二行中,返回@player而不是@gplayer。如果未定義@gplayer,則您的find_by_id將在您的規範中返回nil,因此if條件在到達remove_player之前會短路。

+0

男人不敢相信我花了2個小時尋找錯誤的東西,從來沒有發現。謝謝。對於愚蠢的問題感到抱歉。 – bdwain 2013-04-25 17:18:45