2014-09-06 2 views
0

Je possède ce test de fonctionnalité (modèle de magasin ont une validation unique):Problèmes avec rspec 3, capybara et machiniste 2

feature "Index" do 
    before do 
    3.times { Store.make! } 
    end 
    scenario "User visit index" do 
    visit stores_path 
    within("table.table") do 
     Store.all.each do |store| 
     expect(page).to have_content(store.name) 
     end 
    end 
    end 
end 

Quand je lance le test, échoue au hasard:

Failure/Error: 3.times { Store.make! } 
ActiveRecord::RecordInvalid: 
    Validation failed: name has already been taken 

Mon plan est (suivre la documentation machiniste pour générer un enregistrement unique):

Store.blueprint do 
    name { "store #{sn}" } 
end 

J'utilise bijou DatabaseCleaner, ma conf ig rails_spec:

ENV["RAILS_ENV"] ||= 'test' 
require 'spec_helper' 
require File.expand_path("../../config/environment", __FILE__) 
require 'rspec/rails' 
require 'shoulda/matchers' 
require 'capybara/rails' 
require 'capybara/rspec' 
require 'pundit/rspec' 
require 'database_cleaner' 

Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f } 

ActiveRecord::Migration.maintain_test_schema! 

RSpec.configure do |config| 

    config.mock_with :rspec 
    config.fixture_path = "#{::Rails.root}/spec/fixtures" 
    config.use_transactional_fixtures = false 


    config.before(:each) do |example| 
    DatabaseCleaner.strategy = if example.metadata[:js] 
     :truncation 
    else 
     :transaction 
    end 
    DatabaseCleaner.start 
    end 

    config.after(:each) do 
    DatabaseCleaner.clean 
    end 

    DatabaseCleaner.logger = Rails.logger 

    config.infer_spec_type_from_file_location! 

que les erreurs me rendent fou

Répondre

0

Essayez de remplacer les éléments suivants dans votre spec/spec_helper.rb:

config.before :suite do |example| 
    DatabaseCleaner.strategy = example.metadata[:js] ? :truncation : :transaction 
end 

config.before do 
    DatabaseCleaner.clean 
end 
Questions connexes