Ruby on rails 带有Rspec数据库连接的无头Chrome不工作

Ruby on rails 带有Rspec数据库连接的无头Chrome不工作,ruby-on-rails,rspec,google-chrome-headless,Ruby On Rails,Rspec,Google Chrome Headless,我有一个通过的规范,但是当我添加js:true时,它失败了 它失败是因为在visit survey\u path(survey)之前有一个survey和一个account然后它尝试运行该行visit survey\u path(survey),我得到了未定义的nil:NilClass方法调查,因为没有帐户或调查 好像数据库里的所有东西都被删除了 我在视图中有一个react组件,所以我想为它编写特性规范,因此我需要js:true 当我有js:true? describe '#edit', js

我有一个通过的规范,但是当我添加
js:true
时,它失败了

它失败是因为在
visit survey\u path(survey)
之前有一个
survey
和一个
account
然后它尝试运行该行
visit survey\u path(survey)
,我得到了
未定义的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帮助文件中有这个

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

运行功能测试时,建议使用
:truncation
clean方法。只需将以下内容添加到您的数据库\u cleaner配置中:

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
资料来源: