Sidekiq工作人员无法在Rspec测试中访问测试数据库

时间:2015-08-31 18:20:36

标签: ruby-on-rails redis sidekiq

当我尝试运行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

0 个答案:

没有答案