2010-09-10 69 views
1

我有以下我的應用程序模型:協會在測試中沒有找到創建的對象

class Game < ActiveRecord::Base 
    has_many :players 
    has_many :villages, :through => :players 
end 

class Village < ActiveRecord::Base 
    belongs_to :player 
end 

class Player < ActiveRecord::Base 
    belongs_to :game 
    has_many :villages 

    before_create :build_starting_village 

    protected 

    def build_starting_village 
    villages.build(some_attributes) 
    end 
end 

我測試與早該/ FactoryGirl遊戲功能的某些部分,這是測試:

setup do 
    @villages = [] 
    5.times do |i| 
     p = Factory(:player, :game => @game) 
     v = p.villages.first 
     assert v 
     @villages << v 
    end 
    assert_equal @villages.size, @game.villages.size 
    end 

問題是最後一個斷言失敗。我已經嘗試了許多醜陋的東西,如:

@game.villages(true) 
    @game.players(true) 
    @game = Game.find(@game.id) 

但我看不出要找到問題的根源。我曾嘗試禁用交易燈具(我不使用燈具,但我認爲這也影響工廠女孩),它在其他測試中有幫助,但在這裏它沒有效果。

設置塊中的斷言在大約4次運行中失敗。我試圖懷疑MySQL ...當我從RubyMine調試它時,所有事情都通過重新加載語句傳遞,但不是從命令行傳遞。

+0

我已經能夠通過改變來解決這個問題是什麼在我看來,無關的代碼。我一定會回到這裏,找出原因。 – Honza 2010-09-14 19:39:18

回答

1

嘗試聲稱比其他感實性的東西,因爲它可以是任何東西,如assert_instance_of Village

在下列情況下,還發生了什麼?請原諒我的任何輕微的語法錯誤,還沒有使用測試::單位/早該在一段時間,但在你的代碼,不知道從哪裏@game來自

def test_player_has_village_on_new 
    p = Factory(:player, :game => Factory(:game)) 
    assert_equal 1, p.villages.size 
end 
+0

我alrady有這個測試,它通過 – Honza 2010-09-12 11:45:58

+0

輸出村莊和遊戲與檢查聲明,例如'puts @ villages.inspect',以便您可以在測試失敗時看到它們。 – 2010-09-12 18:00:48

相關問題