2

Rspedを使用したCapybaraスクリプトがあります。これには:js => true、スクリプトを単独で実行したときに正常に機能するスクリプトが含まれています。わーい!スクリプトは次のとおりです。

# spec/requests/capybara_and_js_spec.rb
require 'spec_helper'

describe "Associating Articles with Menus" do
  it "should include javascript", js: true do
    visit root_path
    page.should have_selector('script')
  end
end

スクリプトを実行すると、次のようになります。

.
Finished in 4.22 seconds
1 example, 0 failures

ただし、を介してすべての仕様で同じスクリプトを実行するとGuard Run all、これが得られます(数千のテストを省略しました)

........................*...*..............Rack application timed out during boot
Rack application timed out during boot
F.....................................
4

2 に答える 2

4

私はこの問題の調査にかなりの時間を費やし、この問題に関する興味深いブログ投稿をいくつか見つけましたが、どの解決策もうまくいきませんでした。

私が試したオプションは次のとおりです。

Capybara Seleniumのデフォルトのjsドライバーから、次のようにWebkitとPoltergeistに切り替えました。

# Gemfile
gem "capybara-webkit"

# spec/spec_helper.rb
Spork.prefork do
  Capybara.javascript_driver = :webkit
end

# Gemfile
  gem "poltergeist"

# spec/spec_helper.rb
Spork.prefork do
  require 'capybara/poltergeist'
  Capybara.javascript_driver = :poltergeist
end

しかし、どちらも運がありません。

このスレッドこの記事ごとに私は試しました:

# spec/spec_helper.rb
Spork.prefork do
  Capybara.server_boot_timeout = 600  # Default is 10 my entire suite
end                                   # takes ~550s to run, that's why I
                                      # attempted such a large boot timeout in
                                      # case the time was from beginning of suite 
                                      # execution.

無駄に。

それから私はこの記事を見つけたので、私は試みました:

# spec/spec_helper.rb
# initial advice was for cucumber, and thus recommended this to be placed in
# the features/env.rb file
def find_available_port
  server = TCPServer.new('127.0.0.1', 0)
  server.addr[1]
ensure
  server.close if server
end

if ENV['TDDIUM'] then
  Capybara.server_port = find_available_port
end

しかし、それでは運がありません。

また、StackOverflowのこの問題に従って、database_cleanerの設定をチェックして、DatabaseCleanerがFactoryGirlのファクトリとうまく連携していることを確認しました。

まだ運がない。

次に、次のように、Guardfileの下位レベルのrspecテストからcapybaraテストを解析しようとしました。

group 'integration tests' do
  # Capybara Tests
  guard 'rspec', spec_paths: ['spec/requests'] do
    watch(%r{^spec/requests/.+_spec\.rb})
  end  
  # Cucumber Feature Tests
  guard 'cucumber', bundler: true do
    watch(%r{^features/.+\.feature$})
  end
end

group 'unit tests' do
  rspec_paths = ['spec/controllers', 'spec/helpers', 'spec/models', 'spec/views']
  # RSpec Unit Tests
  guard 'rspec', spec_paths: rspec_paths do
    watch(%r{^spec/.+_spec\.rb$})
  end
  # Jasmine JS Unit Tests
  guard 'jasmine', all_on_start: false, all_after_pass: false do
    watch(%r{spec/javascripts/.+_spec\.(js\.coffee|js|coffee)$})
  end
end

そして成功!ついに!

于 2012-11-14T21:15:50.387 に答える