0

私は非常に紛らわしい問題に遭遇しました...

単独で実行すると、すべてのテストに合格します。レーキテストのように実行すると、統合テストを実行した後、マシニストは設計図を見つけることができなくなったと言います。

カピバラのテストを機能させるには、いくつかの魔法を呼び出す必要があります...

トランザクションフィクスチャを取得するには、次のようにすべてのアクティビティを1つのトランザクションに強制します。

#always use the same connection so updates inside of transactions are visible.
#allows the use of use_transactional_fixtures
ActiveRecord::ConnectionAdapters::ConnectionPool.class_eval do
  def current_connection_id
    #always fetch the connection for the main thread
    # was Thread.current.object_id
    Thread.main.object_id
  end

  def clear_reloadable_connections!
    #do nothing, when connections are reloaded, otherwise the only connection is severed on each request
  end
end

私のようなものを発行した後 、ブループリントを再び使用できるようにするためにvisit new_user_session_path これを行う必要があり ます。load "#{Rails.root}/test/blueprints.rb"

Machinistが単純な後に青写真を失う可能性がある方法についてのアイデアはありますvisitか?

4

1 に答える 1

1

ここでの問題は、Capybara の RackTest ドライバーに関係しています。ActionDispatch::Reloader.cleanupリクエストを処理した後、 !を呼び出しています。のコメントを見ると、が false のActionDispatch::Reloader場合のみ含まれています。config.cache_classes

したがって、1 つの解決策はconfig.cache_classestrue に設定することですenvironment/test.rbが、これは最善の解決策ではありません。

別の解決策は、別のドライバーを使用することです (私はこれを自分で試したことはありません)。Capybara にはさまざまなドライバーが付属しています。

私は Brad と同様のことを行いました - カピバラの訪問を使用する仕様で設計図をリロードすることによって。仕様では、次のような after ブロックを追加できます。

describe "my test" do
    after do
        load_blueprint
    end
end

reload_blueprint メソッドを spec/support ディレクトリのファイルに配置しました。spec/support/load_blueprint.rb

ただし、これは回避策であり、適切な解決策ではありません。

于 2011-12-16T05:43:05.623 に答える