0

我需要为这个类实现 100% 的代码覆盖率。

我将如何在 simplecov 中测试以下类?

如何在 rspec 中测试 save_user 方法?

class Log < ActiveRecord::Base
  has_and_belongs_to_many :tags
  has_one :asset
  has_one :user
  belongs_to :user

  after_create :save_user

  def save_user
    self.user_id = :current_user
    self.save()
  end
end
describe Log do
    context "When saving a user is should save to the database."

    it "should call insert fields with appropriate arguments" do
    expect(subject).to receive(:asset).with("TestData")
    expect(subject).to receive(:user).with("DummyName")
    expect(subject).to save_user 
    subject.foo
end
end 
4

1 回答 1

0

有几个问题正在发生:

has_one :user
belongs_to :user

有一个“has_one”和“belongs_to”关系来指代同一个模型是不寻常的。通常你只需要一个或另一个。(例如,如果 Log 有一个 user_id 字段,那么您只需要belongs_to而不是has_one

self.user_id = :current_user

如果您尝试调用方法而不是存储符号,您可能想要current_user代替。:current_user

为了测试after_save实际运行,我建议如下:

log = Log.new
expect(log).to receive(:after_save).and_call_original
log.save
expect(log.user).to eq(current_user)

在新实例上调用 save 将触发after_create运行,然后您可以验证结果并检查它是否正确运行。

于 2016-09-27T04:58:21.050 回答