无头Chrome与Rspec数据库连接无法正常工作

时间:2017-10-19 00:04:03

标签: ruby-on-rails rspec google-chrome-headless

当我添加js: true失败时,我有一个传递的规范。

它失败了,因为在visit survey_path(survey)之前有一个survey和一个account然后它会尝试运行该行visit survey_path(survey)而我得到undefined method surveys for nil:NilClass因为没有帐户或调查。

就像从数据库中删除了所有内容。

我在视图中有一个react组件,所以我想为它编写功能规范,因此我需要js: true

当我js: true时,有人知道数据库没有调查和帐户的原因吗?

  describe '#edit', js: true do
    let(:new_survey_name) { 'new survey name' }

    context 'authenticated user' do
      before do
        login_as user

        # Here there is an account and survey.
        # Then inside the code when Survey#show is hit there is 
        # no account or survey
        visit survey_path(survey)
      end

      it 'can edit survey' do
        click_link 'Settings'
        fill_in 'survey[name]', with: new_survey_name

        click_button 'Save'
        visit survey_path(survey)
        expect(page).to have_content(new_survey_name)
        expect(page).not_to have_content('Status')
      end
    end

rails helper文件里面有这个

RSpec.configure do |config|
  config.include FactoryGirl::Syntax::Methods
  config.use_transactional_fixtures = true
  config.infer_spec_type_from_file_location!
  config.filter_rails_from_backtrace!
  config.include RequestSpecHelper, type: :request

  config.include Warden::Test::Helpers

  config.use_transactional_fixtures = false

  config.before(:each) do
    DatabaseCleaner.strategy = :transaction
  end

  config.around(:each) do |example|
    DatabaseCleaner.cleaning do
      example.run
    end
  end

  config.before(:suite) do
    begin
      DatabaseCleaner.clean_with(:truncation)
    ensure
      DatabaseCleaner.clean
    end
  end
end


Capybara.register_driver :chrome do |app|
  Capybara::Selenium::Driver.new(app, browser: :chrome)
end

Capybara.register_driver :headless_chrome do |app|
  capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
    chromeOptions: {
      args: %w(headless disable-gpu)
    }
  )

  Capybara::Selenium::Driver.new app,
    browser: :chrome,
    desired_capabilities: capabilities
end

Capybara.configure do |config|
  config.default_max_wait_time = 5
  config.javascript_driver = :headless_chrome
  config.server_host = 'localhost'
  config.server_port = 54_321
end

1 个答案:

答案 0 :(得分:1)

当您运行功能测试时,建议使用:truncation清除方法。只需将这样的内容添加到database_cleaner config:

config.before(:each, type: :feature) do
  driver_shares_db_connection_with_specs = Capybara.current_driver == :rack_test

  DatabaseCleaner.strategy = :truncation if !driver_shares_db_connection_with_specs
end

来源:https://github.com/DatabaseCleaner/database_cleaner#rspec-with-capybara-example