当我尝试运行Rspec
测试时,sidekiq工作者总是使用开发数据库而不是测试数据库。这是我的代码。
Rspec测试文件:
it "Student can get latest status after looking for prioritized tutor" do
post api_v1_students_request_look_for_prioritized_tutor_path,
{ subject: 'nothing' },
{ "AUTHORIZATION" => ActionController::HttpAuthentication::Token.
encode_credentials("remember_token2")}
p Sidekiq::Worker.jobs.first
end
的打印结果
p Sidekiq::Worker.jobs.first
是
.[Sidekiq::Extensions::DelayedClass, [{"class"=>"Sidekiq::Extensions::DelayedClass", "args"=>["---\n- !ruby/class 'Listener::Studentlistener'\n- :public_send\n- - publish_student_state\n - 2\n"], "retry"=>true, "queue"=>"default", "jid"=>"f26083779b943283b5389c47", "created_at"=>1441042790.1108208}, {"class"=>"Sidekiq::Extensions::DelayedClass", "args"=>["---\n- !ruby/class 'Listener::Requestlistener'\n- :public_send\n- - publish_request_creation\n - 1\n"], "retry"=>true, "queue"=>"default", "jid"=>"b7eca603bb1c7e6199751435", "created_at"=>1441042790.1343408}, {"class"=>"Sidekiq::Extensions::DelayedClass", "args"=>["---\n- !ruby/class 'Listener::Tutorlistener'\n- :public_send\n- - publish_request_creation\n - 1\n"], "retry"=>true, "queue"=>"default", "jid"=>"102ed2f8419364864dd1fa8e", "created_at"=>1441042790.1346662}, {"class"=>"Sidekiq::Extensions::DelayedClass", "args"=>["---\n- !ruby/class 'Listener::Studentlistener'\n- :public_send\n- - publish_student_state\n - 2\n"], "retry"=>true, "queue"=>"default", "jid"=>"10b97c57f7bb3a53b82609bb", "created_at"=>1441042790.298615}, {"class"=>"Sidekiq::Extensions::DelayedClass", "args"=>["---\n- !ruby/class 'Listener::Requestlistener'\n- :public_send\n- - publish_request_creation\n - 2\n"], "retry"=>true, "queue"=>"default", "jid"=>"a2c382b66a2036265b76f13d", "created_at"=>1441042790.3033404}, {"class"=>"Sidekiq::Extensions::DelayedClass", "args"=>["---\n- !ruby/class 'Listener::Tutorlistener'\n- :public_send\n- - publish_request_creation\n - 2\n"], "retry"=>true, "queue"=>"default", "jid"=>"2e623670a35ac05ffa993287", "created_at"=>1441042790.3036788}]]
表示sidekiq
获得所有作品。但是,sidekiq worker使用开发数据库而不是测试数据库,因此它无法在测试数据库中找到正确的记录,我的测试将失败。任何人都知道如何解决它?
我的database.yml
文件:
default: &default
adapter: mysql2
encoding: utf8
pool: 5
username: root
password: 3933
socket: /var/run/mysqld/mysqld.sock
development:
<<: *default
database: TWS_Server_development
test:
<<: *default
database: TWS_Server_test
production:
<<: *default
database: TWS_Server_production
username: TWS_Server
password: <%= ENV['TWS_SERVER_DATABASE_PASSWORD'] %>
和我的spec_helper.rb
文件
require 'database_cleaner'
require 'factory_girl'
require 'sidekiq/testing'
require 'wisper/rspec/matchers'
Sidekiq::Testing.fake!
RSpec.configure do |config|
ENV['RAILS_ENV'] ||= 'test'
config.expect_with :rspec do |expectations|
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
end
config.mock_with :rspec do |mocks|
mocks.verify_partial_doubles = true
end
config.include(Wisper::RSpec::BroadcastMatcher)
config.include FactoryGirl::Syntax::Methods
config.before(:suite) do
DatabaseCleaner.strategy = :truncation
begin
DatabaseCleaner.start
FactoryGirl.lint
ensure
DatabaseCleaner.clean
end
end
end