首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试DelayedJob是否正在从另一个类调用方法?

如何测试DelayedJob是否正在从另一个类调用方法?
EN

Stack Overflow用户
提问于 2019-03-28 18:04:50
回答 1查看 39关注 0票数 0

我正在设置规范,以测试在特定条件下作业是否调用方法。

到目前为止,这就是我所拥有的:

代码语言:javascript
复制
describe RandomJob do
  context "when payload[:type] = MyModel" do
    let!(:my_model) { create :my_model }
    let!(:payload)  { { type: "MyModel", id: my_model.id } }

    context "when Model exists" do
      it "calls MyModel.fire! with payload" do
        RandomJob.perform_now(payload)
        expect_any_instance_of(MyModel).to receive(:fire!).with(payload)
      end
    end

    context "when Model does not exist" do
      it "does not call MyModel.fire!" do
        RandomJob.perform_now(payload)
        expect_any_instance_of(MyModel).not_to receive(:fire!)
      end
    end
  end
end

只是为了确定我的测试方法有效。我的工作是这样安排的:

代码语言:javascript
复制
class RandomJob < ApplicationJob
  def perform(payload)
    @payload = payload

    fire_model!
  end

  private

  def fire_model!
    my_model&.fire! @payload
  end

  def my_model
    MyModel.find(@payload[:id])
  end
end

我期望第一次考试通过,第二次考试失败。然而,我的第一次考试失败了,第二次考试通过了。我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-29 02:37:12

您必须将期望放在perform_now调用之前。

代码语言:javascript
复制
    context "when Model exists" do
      it "calls MyModel.fire! with payload" do
        expect_any_instance_of(MyModel).to receive(:fire!).with(payload)
        RandomJob.perform_now(payload)
      end
    end

    context "when Model does not exist" do
      it "does not call MyModel.fire!" do
        expect_any_instance_of(MyModel).not_to receive(:fire!)
        RandomJob.perform_now(payload)
      end
    end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55404206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档