Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 如何使用factory_girl使用rspec 2测试rails 3控制器的功能?_Ruby On Rails 3_Rspec2_Factory Bot - Fatal编程技术网

Ruby on rails 3 如何使用factory_girl使用rspec 2测试rails 3控制器的功能?

Ruby on rails 3 如何使用factory_girl使用rspec 2测试rails 3控制器的功能?,ruby-on-rails-3,rspec2,factory-bot,Ruby On Rails 3,Rspec2,Factory Bot,使用Rails 3、Rspec 2、factory_girl_Rails gem,我有一个控制器,代码如下: def remove_player @player = User.find(params[:id]) current_team.users.delete(@player) current_team.games.each do |g| ug = GamesUser.where(:game_id => g.id, :user_id => @player.id)

使用Rails 3、Rspec 2、factory_girl_Rails gem,我有一个控制器,代码如下:

def remove_player
 @player = User.find(params[:id])
 current_team.users.delete(@player)
 current_team.games.each do |g| 
   ug = GamesUser.where(:game_id => g.id, :user_id => @player.id)
   ug.each {|x| x.destroy}
 end
 redirect_to(team_path(current_team), :notice => 'Player was successfully removed from this team')
end
它工作得很好,做了我需要它做的事情。但是,我无法找出我在测试中的错误,测试结果如下:

    describe "Remove player" do
    before do
        @team = Factory(:team)
        @player = Factory(:user)
        @game = Factory(:game)
        controller.stub!(:current_team).and_return(@team)
    end

    it "should remove player from team" do
        @team.users << @player
        @team.users.should have(1).users
        post :remove_player, :id => @player.id
        @team.users.should have(0).users
    end

    it "should remove games from player schedule" do
        Factory(:games_user, :user_id => @player.id)
        @player.should have(1).games
        post :remove_player, :id => @player.id
        @player.should have(0).games    
    end
end
描述“删除玩家”的操作
在做之前
@团队=工厂(:团队)
@播放器=工厂(:用户)
@游戏=工厂(:游戏)
控制器,存根!(:当前团队)。和返回(@team)
终止
它“应该将球员从球队中除名”吗
@team.users@player.id
@team.users.应具有(0).个用户
终止
它“应该从玩家日程中删除游戏”吗
工厂(:games\u user,:user\u id=>@player.id)
@玩家应该有(1)个游戏
post:remove_player,:id=>@player.id
@玩家。应该有(0)。个游戏
终止
终止
第一次测试通过了。然而,第二种情况并非如此。我对rspec和测试都是新手,所以请随意指出您看到的任何缺陷-我不会生气


我在这里尝试做的要点是从一个团队中删除一个玩家(团队有很多用户),并从该玩家的日程中删除任何游戏(Game habtm用户通过GamesUser)。哦,“current_team”是一个助手方法,它根据会话变量获取团队。

如果仔细比较您的断言,您将调用:在第一种情况下,“@team”上有许多“用户”

@team.users.should have(0).users
但是调用:在“@player”上有很多“游戏”


如果不看文档(我可能错了),我认为
中的“games”有(1)。games
只是语法上的糖分。请验证并让我知道。

我看到的主要缺陷是控制器规格的存在。:)IMHO RSpec对于模型来说非常好,但是RSpec控制器规格是痛苦的——使用Cucumber代替。
@player.should have(0).games