I обезьяну исправлена мой класс пользователей (поддержанный по завещанию), чтобы использовать ActiveJob как так:Тестирование Sidekiq/ActiveJob - Работа в ActiveJob но не Sidekiq
class User < ActiveRecord::Base
# Omitted
def send_devise_notification(notification, *args)
devise_mailer.send(notification, self, *args).deliver_later
end
end
Я попытался тестированием с помощью следующего теста:
class UserTest < ActiveSupport::TestCase
include ActiveJob::TestHelper
def setup
@user = User.new(email: '[email protected]', password: 'password',
password_confirmation: 'password')
end
test 'send_devise_notification queues into activejob' do
@user.save
assert_equal enqueued_jobs.size, 1 # This test passes
assert_equal Sidekiq::Extensions::DelayedMailer.jobs.size, 1 # This test fails
end
журнал/test.log выглядит следующим образом:
------------------------------------------------------------------
UserTest: test_0011_send_devise_notification queues into activejob
------------------------------------------------------------------
[1m[35m (0.1ms)[0m SAVEPOINT active_record_1
[1m[36mUser Exists (0.4ms)[0m [1mSELECT 1 AS one FROM "users" WHERE "users"."email" = '[email protected]' LIMIT 1[0m
[1m[35mUser Load (0.3ms)[0m SELECT "users".* FROM "users" WHERE "users"."confirmation_token" = $1 ORDER BY "users"."id" ASC LIMIT 1 [["confirmation_token", "62d1fac8e1319c29bfbe630aece15975963994b09746edbad65772e4598aa4d2"]]
[1m[36mSQL (0.4ms)[0m [1mINSERT INTO "users" ("email", "encrypted_password", "created_at", "updated_at", "confirmation_token", "confirmation_sent_at") VALUES ($1, $2, $3, $4, $5, $6) RETURNING "id"[0m [["email", "[email protected]"], ["encrypted_password", "$2a$04$b6/WjVWCthq.bKG1KN8JPeb3w8jz8oVWTU53BpTn90wIlTQ5cC2KO"], ["created_at", "2015-01-30 06:19:03.531310"], ["updated_at", "2015-01-30 06:19:03.531310"], ["confirmation_token", "62d1fac8e1319c29bfbe630aece15975963994b09746edbad65772e4598aa4d2"], ["confirmation_sent_at", "2015-01-30 06:19:03.730092"]]
[ActiveJob] Enqueued ActionMailer::DeliveryJob (Job ID: 9730d5a8-5dd4-4334-8290-e4e8e554715e) to Test(mailers) with arguments: "Devise::Mailer", "confirmation_instructions", "deliver_now", gid://swyp/User/232633312, "s7QVW_T2Aw8-ik6o1g2f", {}
[1m[35m (0.2ms)[0m RELEASE SAVEPOINT active_record_1
[1m[36m (0.2ms)[0m [1mROLLBACK[0m
[1m[35m (0.1ms)[0m BEGIN
enqueued_jobs внутри отладчик выглядит следующим образом:
[{:job=>ActionMailer::DeliveryJob,
:args=>["Devise::Mailer", "confirmation_instructions", "deliver_now", #<User id: 232633312, email: "[email protected]", encrypted_password: "$2a$04$E05.gR8oXSHQyk8hUOTBZ.PvswvHy2YYtTNXaha.wj2...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, confirmation_token: "cba7134de82b6fde115fd3ca8e40975befeac299a1e619cdcb...", confirmed_at: nil, confirmation_sent_at: "2015-01-30 17:08:51", unconfirmed_email: nil, created_at: "2015-01-30 17:08:51", updated_at: "2015-01-30 17:08:51", first_name: nil, last_name: nil>, "QBLzzPLKVLy3znSZESBc", {}], :queue=>"mailers"}]
бен/рельсы с --environment тест
irb(main):004:0> Rails.application.config.active_job.queue_adapter
=> :sidekiq
Мои PROCFILE выглядит следующим образом:
web: bin/rails s
redis: redis-server
worker: bundle exec sidekiq -q default -q mailers
Кто-нибудь есть какие-нибудь идеи?
К сожалению, 'assert_equal ActiveJob :: QueueAdapters :: SidekiqAdapter :: JobWrapper.jobs.size, 1' все еще не работает. Любые другие идеи? – sunnyrjuneja
Майк был прав, что Sidekiq его экземпляр ActiveJob. Тем не менее, оказывается, что «ActiveJob :: TestHelper» не имеет ничего общего с фактическим добавлением чего-либо непосредственно в очередь адаптера. Удаление «ActiveJob :: TestHelper» выполнило второй тестовый проход. Я обновил его ответ, чтобы отразить это. – sunnyrjuneja
Вот что я закончил делать https://medium.com/@chuckjhardy/testing-rails-activejob-with-rspec-5c3de1a64b66 – CharlesJHardy