Rails:用于更新活动记录条目的RSPEC测试失败

时间:2014-07-28 21:58:09

标签: ruby-on-rails ruby activerecord rspec

我有两个模型:DraftPick。我希望在Draft创建后,current_pick的ActiveRecord列Pick增加1。

Inside Pick,我有一个方法可以将draft.current_pick增加1:

class Pick < ActiveRecord::Base
belongs_to :draft

after_save :advance_draft

def advance_draft
    draft.updraft
end

draft内,updraft是:

def updraft
    self.current_pick += 1
end

我确保current_pick增加1的测试是:

    it 'should run the advance_draft method after creating' do
        team1 = FactoryGirl.create(:team)
        team2 = FactoryGirl.create(:team_two)
        cam = FactoryGirl.create(:player)
        draft = FactoryGirl.create(:two_team_draft)
        pick = Pick.create(:player_id => cam.id, :team_id => draft.team_at(draft.current_pick).id, :draft_id => draft.id, :draft_position => draft.current_pick)
        draft.draft_position.should eq 2
    end

在测试中正在创建pickdraft,但没有在正确的draft上调用updraft方法,因为pick.draft.draft_positionpick之后保持为1 {1}}已创建。 (它应该增加到2)。

这是我的架构:

create_table "drafts", force: true do |t|
    t.integer  "draft_position"
    t.integer  "number_of_teams"
    t.integer  "PPTD"
    t.integer  "PPR"
    t.integer  "current_pick",            default: 1
end

create_table "picks", force: true do |t|
    t.integer  "player_id"
    t.integer  "team_id"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.integer  "draft_id"
    t.integer  "draft_position"
end

我的问题是,如何在我的测试中正确增加pick.draft.current_pick

1 个答案:

答案 0 :(得分:0)

我会做两件事,在更新计数以增加值并保存记录时使用increment!,并且reload您正在查看的对象,因为它的数据库表示已更改,因为它创建了。

def updraft
  increment!(:current_pick)
end

这将更新current_pick并一次保存对象。

it 'should run the advance_draft method after creating' do
  # ... setup
  draft.reload.draft_position.should eq 2
end

现在,不是使用在修改发生之前创建的draft实例,而是使用版本当前的数据库。