Ruby on rails 测试是否存在ActiveRecord回调
如何测试模型中是否存在回调,特别是通过创建记录触发的回调,例如创建后的Ruby on rails 测试是否存在ActiveRecord回调,ruby-on-rails,rspec,rspec3,Ruby On Rails,Rspec,Rspec3,如何测试模型中是否存在回调,特别是通过创建记录触发的回调,例如创建后的或提交后的:创建时的 下面是一个回调示例,其中包含它调用的(empty)方法 # app/models/inbound_email.rb class InboundEmail < ActiveRecord::Base after_commit :notify_if_spam, on: :create def notify_if_spam; end end 使用测试方法来测试该方法是否被调用似乎是一种可行的方
或提交后的:创建时的
下面是一个回调示例,其中包含它调用的(empty)方法
# app/models/inbound_email.rb
class InboundEmail < ActiveRecord::Base
after_commit :notify_if_spam, on: :create
def notify_if_spam; end
end
使用测试方法来测试该方法是否被调用似乎是一种可行的方法。
例如:
expect(FactoryGirl.create(:inbound_email)).to receive(:notify_if_spam)
但这不起作用。另一种方法是测试当创建一个记录时,调用的方法内部会发生一些事情(例如,发送电子邮件、记录消息)。这意味着确实调用了该方法,因此存在回调。然而,我发现这是一个草率的解决方案,因为您实际上是在测试其他东西(例如发送电子邮件、记录消息),所以我不想寻找这样的解决方案。我认为Frederick Cheung是对的。这应该行得通。您的示例的问题是,在设置期望值之前已经调用了回调
describe InboundEmail do
describe "#notify_if_spam" do
it "is called after new record is created" do
ie = FactoryGirl.build(:inbound_email)
expect(ie).to receive(:notify_if_spam)
ie.save!
end
end
end
我认为张鉴泉是对的。这应该行得通。您的示例的问题是,在设置期望值之前已经调用了回调
describe InboundEmail do
describe "#notify_if_spam" do
it "is called after new record is created" do
ie = FactoryGirl.build(:inbound_email)
expect(ie).to receive(:notify_if_spam)
ie.save!
end
end
end
我认为张鉴泉是对的。这应该行得通。您的示例的问题是,在设置期望值之前已经调用了回调
describe InboundEmail do
describe "#notify_if_spam" do
it "is called after new record is created" do
ie = FactoryGirl.build(:inbound_email)
expect(ie).to receive(:notify_if_spam)
ie.save!
end
end
end
我认为张鉴泉是对的。这应该行得通。您的示例的问题是,在设置期望值之前已经调用了回调
describe InboundEmail do
describe "#notify_if_spam" do
it "is called after new record is created" do
ie = FactoryGirl.build(:inbound_email)
expect(ie).to receive(:notify_if_spam)
ie.save!
end
end
end
你为什么不喜欢信息期望?@PhilipHallstrom我不知道你为什么认为我不喜欢信息期望?我认为解决方案可能会涉及一个消息期望,正如我在示例中提到的。这个问题不清楚。是否要测试该方法是否存在?或者是否调用了回调?@我想测试回调是否存在,并调用正确的方法。在我看来,测试在创建记录时是否调用了方法notify\u if\u spam
,这是最明显的方法。如果构建对象(不保存),设置期望值,然后保存它,它是否有效?为什么不喜欢消息期望值?@PhilipHallstrom我不确定为什么你认为我不喜欢消息期望值?我认为解决方案可能会涉及一个消息期望,正如我在示例中提到的。这个问题不清楚。是否要测试该方法是否存在?或者是否调用了回调?@我想测试回调是否存在,并调用正确的方法。在我看来,测试在创建记录时是否调用了方法notify\u if\u spam
,这是最明显的方法。如果构建对象(不保存),设置期望值,然后保存它,它是否有效?为什么不喜欢消息期望值?@PhilipHallstrom我不确定为什么你认为我不喜欢消息期望值?我认为解决方案可能会涉及一个消息期望,正如我在示例中提到的。这个问题不清楚。是否要测试该方法是否存在?或者是否调用了回调?@我想测试回调是否存在,并调用正确的方法。在我看来,测试在创建记录时是否调用了方法notify\u if\u spam
,这是最明显的方法。如果构建对象(不保存),设置期望值,然后保存它,它是否有效?为什么不喜欢消息期望值?@PhilipHallstrom我不确定为什么你认为我不喜欢消息期望值?我认为解决方案可能会涉及一个消息期望,正如我在示例中提到的。这个问题不清楚。是否要测试该方法是否存在?或者是否调用了回调?@我想测试回调是否存在,并调用正确的方法。在我看来,测试在创建记录时是否调用了方法notify\u if\u spam
,这是最明显的方法。如果构建对象(不保存),设置期望值,然后保存它,它是否有效?就是这样!在您的示例中,只需将create
替换为save
。谢谢,就这样!在您的示例中,只需将create
替换为save
。谢谢,就这样!在您的示例中,只需将create
替换为save
。谢谢,就这样!在您的示例中,只需将create
替换为save
。谢谢