Как мне проверить эту функцию контроллера rails 3 с помощью rspec 2, используя factory_girl? - PullRequest
1 голос
/ 10 февраля 2011

Используя Rails 3, Rspec 2, gem factory_girl_rails, у меня есть контроллер со следующим кодом:

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

Первый тест пройден.Однако второй нет.Я новичок в rspec и тестировании в целом, так что не стесняйтесь указывать на любые недостатки, которые вы видите - я не буду обижаться.команда (Team has_many Users) и удалите любые игры из расписания этого игрока (Game habtm Users через GamesUser).Да, а "current_team" - это вспомогательный метод, который выбирает команду на основе переменной сеанса.

1 Ответ

0 голосов
/ 19 сентября 2011

Если вы тщательно сравниваете свои утверждения, в первом случае вы вызываете: has_many 'users' на "@team",

@team.users.should have(0).users

, но не , вызывая: has_many«игры» на «@player»

@player.should have(0).games   

Не глядя на документацию (я могу ошибаться), я думаю, что «игры» в have(1).games - это просто синтаксический сахар.Пожалуйста, проверьте и дайте мне знать.

...