2

我正在使用 RSPEC 进行测试,并将 Sidekiq 用于后台作业。

因为,workersrspec 中没有生成器,所以不知道该使用什么。

https://relishapp.com/rspec/rspec-rails/docs/generators

require 'spec_helper'

RSpec.describe TestWorker, type: ? do # ex. :worker :sidekiq ...
  describe "TestWorker" do
    it "" do
     ....
    end
  end
end

bundle exec rspec spec/workers/test_worker_spec.rb

像下面这样,我得到:uninitialized constant TestWorker 需要'spec_helper'

describe TestWorker do
  it "" do
   ....
  end
end

正如我所尝试的,gem rspec-sidekiq https://github.com/philostler/rspec-sidekiq

app/workers/有人可以提供用于在 Rspec 中进行测试的示例模板吗?

谢谢。

4

2 回答 2

3

我没有使用 rspec-sidekiq gem,但是,这是我如何检查使用 sidekiq 的后台作业的示例

# app/spec/workers/demo_worker_spec.rb

require 'rails_helper'
require 'sidekiq/testing'
Sidekiq::Testing.fake!

RSpec.describe DemoWorker, type: :worker do

  describe "Sidekiq Worker" do

    let (:demo) { FactoryGirl.create(:demo) }

    it "should respond to #perform" do
      expect(DemoWorker.new).to respond_to(:perform)
    end

    describe "Demo" do

      before do
        Sidekiq::Extensions.enable_delay!
        Sidekiq::Worker.clear_all
      end

      it "should enqueue a Email and SMS job" do
        assert_equal 0, Sidekiq::Extensions::DelayedMailer.jobs.size
        Mailer.delay.demo_request(demo.id)
        assert_equal 1, Sidekiq::Extensions::DelayedMailer.jobs.size
      end

    end

  end

end
  1. 在我检查时,如果实例响应执行。
  2. 然后,我在安排工作之前和之后断言。
于 2018-08-09T07:41:12.153 回答
0

有时您可能想要测试的不仅仅是工人是否已入队这一事实。

虽然最好将可能发生在工作perform程序块中的复杂事物解耦,但它可以作为标准类进行测试:

it { expect { MyWorker.new.perform }.to change { ...expectations... } }

或者

it do
  MyWorker.new.perform
  ... expectations ..
end
于 2021-09-27T05:57:07.507 回答