2013-04-25 32 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