5

次のトリック ( http://mikbe.tk/2011/02/10/blazingly-fast-tests/から) を使用して、Spork で RSpec を実行するたびにモデルがリロードされるようにします。

Spork.each_run do
  load "#{Rails.root}/config/routes.rb"
  Dir["#{Rails.root}/app/**/*.rb"].each { |f| load f }
  # .....
end

ただし、テストを実行するたびに次の警告が表示されます。

/myproject/app/models/model.rb:36: warning: already initialized constant CONFIGURABLE

次のように置くことで回避できます:

if !defined?(A_CONSTANT)

すべての定数の後、これは実際には正しく見えません (しかし、機能します)。これを適切に機能させる方法について何か提案はありますか? if(つまり、私のモデルはテストで再ロードされますが、すべての定数定義の後に置く必要はありません。)

4

1 に答える 1

0

「load」を使用すると、ファイルが再ロードされます。つまり、そのファイルに定数が定義されている場合、それらの定数はロードされるたびに再定義されます。load の代わりに "require" を使用することをお勧めします。これは、ファイルが既に読み込まれている場合にファイルを再読み込みしないことでこの問題を回避するためです。

ただし、明らかに、テスト ワールドでファイルをリロードする必要があるため、そのロード中に警告を抑制することができます。

Spork.each_run do
  Kernel.silence_warnings do
    load "#{Rails.root}/config/routes.rb"
    Dir["#{Rails.root}/app/**/*.rb"].each { |f| load f }
    # .....
  end
end
于 2015-09-04T19:12:06.070 に答える