代码之家  ›  专栏  ›  技术社区  ›  Honza

关联在测试中找不到创建的对象

  •  1
  • Honza  · 技术社区  · 14 年前

    我的应用程序中有以下模型:

    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
    

    我正在用Shoulda/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)
    

    但我看不到问题的根源。我尝试过禁用事务性fixture(我不使用fixture,但我认为这也会影响到factorygirl),它在其他测试中有所帮助,但在这里没有效果。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Jed Schneider    14 年前

    试着断言一些不真实的东西,因为它可能是任何东西 assert_instance_of Village

    在下列情况下会发生什么?请原谅我的任何轻微语法错误,我已经有一段时间没有使用test::unit/shoulda了,但是在您的代码中,不知道在哪里 @game 来自

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