gpt4 book ai didi

ruby-on-rails - 设置对 resque .perform 方法的期望。任务在回调中排队

转载 作者:行者123 更新时间:2023-12-04 05:34:21 25 4
gpt4 key购买 nike

所以根据我的理解,我相信当你这样做时Resque.inline = Rails.env.test?您的 resque 任务将同步运行。我正在编写一个关于在 after_commit 期间排队的 resque 任务的测试。回调。after_commit :enqueue_several_jobs

#class PingsEvent < ActiveRecord::Base
...
def enqueue_several_jobs
Resque.enqueue(PingFacebook, self.id)
Resque.enqueue(PingTwitter, self.id)
Resque.enqueue(PingPinterest, self.id)
end
.perform我的 Resque 任务类的方法,我正在做一个 Rails.logger.info在我的测试中,我正在做类似的事情
..
Rails.logger.should_receive(:info).with("PingFacebook sent with id #{dummy_event.id}")
PingsEvent.create(params)
我对 PingTwitter 进行了相同的测试和 PingPinterest .
我在第二个和第三个期望中失败了,因为似乎测试实际上在所有 resque 作业运行之前就完成了。只有第一个测试实际通过。 RSpec 然后抛出一个 MockExpectationError告诉我 Rails.logger没有收到 .info对于另外两个测试。有没有人有过这方面的经验?
编辑
有人提到 should_receive就像 mock我应该做的 .exactly(n).times相反。抱歉没有早点说清楚,但我有不同的期望 it块,我不认为 should_receive合一 it块将为下一个 it 模拟它块?如果我错了,请告诉我。

最佳答案

class A
def bar(arg)
end

def foo
bar("baz")
bar("quux")
end
end

describe "A" do
let(:a) { A.new }

it "Example 1" do
a.should_receive(:bar).with("baz")
a.foo # fails 'undefined method bar'
end
it "Example 2" do
a.should_receive(:bar).with("quux")
a.foo # fails 'received :bar with unexpected arguments
end
it "Example 3" do
a.should_receive(:bar).with("baz")
a.should_receive(:bar).with("quux")
a.foo # passes
end
it "Example 4" do
a.should_receive(:bar).with(any_args()).once
a.should_receive(:bar).with("quux")
a.foo # passes
end
end

像一个 stub ,一条消息期望 替换方法的实现 .满足期望后,对象将不再响应方法调用——这会导致“未定义方法”(如示例 1 所示)。

示例 2 显示了当期望因参数不正确而失败时会发生什么。

示例 3 显示了如何对同一方法的多次调用进行 stub ——按照接收到的顺序,用正确的参数 stub 每个调用。

示例 4 表明您可以使用 any_args() 稍微减少这种耦合。 helper 。

关于ruby-on-rails - 设置对 resque .perform 方法的期望。任务在回调中排队,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12149986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com