2016-07-20 1 views
0

Mon code de test dans les spécifications/caractéristiques/posts_spec.rb ressemble à cecispécifications de caractéristiques Capybara travail que si js: true

require 'spec_helper' 
feature 'Posts' do 
    scenario 'Editing of Micropost', js: true do 
    visit '/signin' 
    fill_in 'Email', with: '[email protected] 
... 

Le code fonctionne très bien avec js: true. Toutefois, si je sors js: true, le test échoue au fill_in 'Email' et si j'utilise save_and_open_page immédiatement avant cette ligne, je vois

Not Found: /signin 

Je crois comprendre que je ne devrais pas avoir à mettre le js: true à moins que je dois tester un fonction javascript et le pilote par défaut rack_test devrait fonctionner. Qu'est-ce qui ne va pas? Mon fichier spec_helper est comme suit

ENV['RAILS_ENV'] ||= 'test' 
require File.expand_path('../../config/environment', __FILE__) 
require 'rspec/rails' 
require 'capybara' 
require 'capybara/rails' 
require 'capybara/rspec' 
require 'capybara-screenshot' 
require 'capybara-screenshot/rspec' 
require 'capybara/poltergeist' 
require 'pp' 
require Rails.root.join('app/services/dbg').to_s 
require 'database_cleaner_support' 
require 'shoulda_matchers_support' 
require 'chris_matchers_support' 
require 'chris_helpers_support' 
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f } 
Capybara.default_host = 'www.example.com' 
RSpec.configure do |config| 
    Capybara.default_driver = :rack_test 
    Capybara.javascript_driver = :poltergeist 
    Capybara::Webkit.configure(&:block_unknown_urls) 
    Capybara::Screenshot.prune_strategy = { keep: 20 } 
    Capybara::Screenshot.append_timestamp = false 
    config.include Capybara::UserAgent::DSL 
    config.include Rails.application.routes.url_helpers 
    config.include ApplicationHelper 
    config.include AccountsHelper 
    config.mock_with :rspec 
    config.fixture_path = "#{::Rails.root}/spec/fixtures" 
    config.use_transactional_fixtures = false 
    config.filter_run focus: true 
    config.run_all_when_everything_filtered = true 
    ActiveRecord::Migration.maintain_test_schema! # dont need db:test:prepare 
end 
RSpec.configure do |config| 
    config.before(:suite) do 
    DatabaseCleaner.clean_with(:truncation) 
    end 
    config.before(:suite) do 
    DatabaseCleaner.strategy = :transaction 
    end 
    # config.before(:each, :js => true) do 
    #  DatabaseCleaner.strategy = :truncation 
    # end 
    config.before(:each) do |example| 
    if example.example.metadata[:js] 
     DatabaseCleaner.strategy = :truncation 
    else 
     DatabaseCleaner.strategy = :transaction 
    end 
    DatabaseCleaner.start 
    end 
    config.after(:each) do 
    DatabaseCleaner.clean 
    end 
end 
+0

utilisez-vous 'database_cleaner'? pouvez-vous coller le contenu de sa config – itsnikolay

+0

Avez-vous essayé de faire la même chose manuellement avec JavaScript désactivé? –

+0

Comment désactiver Javascript dans rspec? – Obromios

Répondre

0

La solution était de supprimer la ligne

Capybara.default_host = 'www.example.com' 

Je ne sais pas pourquoi cela a été l'origine du problème.