24

Capybara Webkit で実行しようとしている JS 機能の仕様があります。ただし、データベース レコードを見つけることができないようです。

問題のスペックはこんな感じ

it "should allow pledging to a Hardback level", js: true do
  book = FactoryGirl.create :book
  visit book_path(book)
  click_link "pledge-btn"
end

残念ながら、book_path(book)本が見つからないため 404 へのリクエスト。

:jsフラグを外すと、テストに合格します。

推奨される方法として、JS 仕様に使用するようにDatabaseCleanerセットアップしました。:truncation

# spec/support/database_cleaner.rb
RSpec.configure do |config|
  config.use_transactional_fixtures = false

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

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

  config.before(:each, :js => true) do
    DatabaseCleaner.strategy = :truncation
  end

  config.before(:each) do
    DatabaseCleaner.start
    DatabaseMetadata.create!(:sanitized_at => DateTime.now) 
  end

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

私はputsテストで本を見つけることができます。

it "should allow pledging to a Hardback level", js: true do
  book = FactoryGirl.create :book
  visit book_path(book)
  p Book.first
  # => .. the book instance
  click_link "pledge-btn"
end

この共有接続方法も試しましたが、問題は解決していないようです。

他に何が間違っている可能性がありますか?

4

6 に答える 6

9

config.use_transactional_fixtures = trueに設定している可能性がありますspec_helper.rb。これは、上記のものを上書きします。

この行を削除するか、spec_helper.rbそこにあるように変更しますfalse

于 2014-05-14T03:50:42.637 に答える
5

私がこのような問題を抱えていたレガシープロジェクトで作業していたのは、次のように DatabaseCleaner 戦略を :truncation に切り替えたことが原因でした:

config.before(:suite) do
  DatabaseCleaner.strategy = :truncation
  DatabaseCleaner.clean

  Test::Seeder.seed!

  DatabaseCleaner.strategy = :transaction
end

DatabaseCleaner.strategy = :transactionだから、私の場合は削除が役に立ちました

于 2014-09-09T14:15:30.823 に答える
-2

あなたの主な問題はrails_helper.rb、次の行がコメントアウトされていることだと思います。

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

これは、database_cleaner.rbロードされないことを意味します。

于 2015-05-06T23:17:30.647 に答える