2017-10-19 5 views
0

Ich habe eine Spezifikation, die aber passiert, wenn ich js: true hinzufügen fehlschlägt.Headless Chrome mit Rspec Datenbankverbindung funktioniert nicht

Es schlägt fehl, weil vor visit survey_path(survey) ein survey ist und ein account dann versucht es, diese Zeile visit survey_path(survey) und ich undefined method surveys for nil:NilClass bekommen zu laufen, weil es keine Konto- oder Umfrage.

Es ist wie alles aus der Datenbank gelöscht wurde.

Ich habe eine Reaktionskomponente in der Ansicht, also möchte ich Feature-Spezifikationen für sie schreiben, daher der Grund, warum ich js: true brauche.

Wer weiß, warum die Datenbank keine Umfrage und ein Konto hat, wenn ich js: true habe?

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 

Die Schienen Helfer Datei hat das im Inneren

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 

Antwort

1

Wenn Sie Feature-Tests laufen lassen, es wird empfohlen, :truncation saubere Methode zu verwenden. Genau so etwas zu Ihrer database_cleaner Config hinzu:

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 

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

Verwandte Themen