【问题标题】:Rails: RSPEC test for updating active record entry is failingRails:更新活动记录条目的 RSPEC 测试失败
【发布时间】:2014-07-28 21:58:08
【问题描述】:

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

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

class Pick < ActiveRecord::Base
belongs_to :draft

after_save :advance_draft

def advance_draft
    draft.updraft
end

draft内部,上升气流是:

def updraft
    self.current_pick += 1
end

我确保 current_pick 加一的测试是:

    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 上调用上升气流方法,因为在创建pick 之后pick.draft.draft_position 仍为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

【问题讨论】:

    标签: ruby-on-rails ruby activerecord rspec


    【解决方案1】:

    我会做两件事,在更新计数时使用 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 实例,而是使用数据库当前的版本。

    【讨论】:

    • 非常感谢。我什至不知道重新加载存在。
    • 我按照您的建议添加了代码,但问题仍然存在。
    • 在draft.updraft 之后添加draft.save 并且reload 方法正常工作!!!非常感谢!
    • 哎呀,你肯定需要保存。我建议了错误的增量方法! increment! 将增加值并为您保存。我使用了不保存的非爆炸版本increment。如果您想简化,请尝试一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 2018-01-16
    • 2023-03-31
    • 2020-08-18
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多