如何使用 RSpec 测试 Sidekiq worker?
How to test a Sidekiq worker with RSpec?
我正在使用 RSPEC 进行测试,并使用 Sidekiq 进行后台作业。
因为 rspec 中没有 workers
的生成器,不确定要使用什么。
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
有人可以在 Rspec.
中提供用于测试 app/workers/
的示例模板吗
谢谢。
我还没有使用 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
- 我正在检查实例是否响应执行。
- 然后,我在计划作业之前和之后断言。
有时您可能想要测试的不仅仅是工作人员是否入队这一事实。
虽然最好将工人的 perform
块中可能发生的复杂事情分离,但它可以作为标准进行测试 class :
it { expect { MyWorker.new.perform }.to change { ...expectations... } }
或
it do
MyWorker.new.perform
... expectations ..
end
我正在使用 RSPEC 进行测试,并使用 Sidekiq 进行后台作业。
因为 rspec 中没有 workers
的生成器,不确定要使用什么。
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
有人可以在 Rspec.
中提供用于测试app/workers/
的示例模板吗
谢谢。
我还没有使用 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
- 我正在检查实例是否响应执行。
- 然后,我在计划作业之前和之后断言。
有时您可能想要测试的不仅仅是工作人员是否入队这一事实。
虽然最好将工人的 perform
块中可能发生的复杂事情分离,但它可以作为标准进行测试 class :
it { expect { MyWorker.new.perform }.to change { ...expectations... } }
或
it do
MyWorker.new.perform
... expectations ..
end