5

TL:DR-Cucumberにアプリを介してページをリクエストさせ、リクエストが「http://mysubdomain.mydomain.dev」からのものであると偽って、JavaScriptを適切に実行するにはどうすればよいですか?

わかりました、これは説明するのに少し時間がかかるかもしれませんが、私に耐えてください...

私は「比較的」経験豊富なRails開発者ですが、つい最近、完全なBDD/TDDに突入しました。

私がキュウリでテストしているページには、新しいネストされたオブジェクトを作成するためのJavaScriptが含まれています(このRailsCastと非常によく似ています)。

ここで問題となるのは、可変サブドメインがあるだけでなく、可変ドメインもあるという事実です(そのドメインを信頼してください...)

そのため、アプリは、request.hostを検索するためにクエリを実行する必要があります。すべてがバックグラウンドで拘束される前に、アプリはアプリの適切なビットを提供し続けることができますcurrent_domaincurrent_subdomain

host! domainバックグラウンドステップのとCapybara.default_host = domainテクニックを使用して、すべてのテストに合格することができました。

ただし、.jsが含まれるページをテストする機能で@javascriptタグを使用すると、Firefoxがフォーカスを取得し、完全なURLを読み込もうとします。

また、Powを実行していて、それらのURLを開発サーバーに接続していることもあります。当然のことながら、ユーザーがログインしようとしたときに、開発DBを検索しているように機能しません。powサーバーをオフにした後でスイートを実行しようとしましたが、タイムアウトになりました。

確かに、javascript Webドライバーは実際にURLにアクセスするべきではありませんが、単にアプリ自体を実行し、ホストが私が言っているものであるかのように見せかけますか?

私は明らかにここに何かが欠けています-どうすればCucumberにページを内部で構築させることができますが、リクエストが「http://mysubdomain.mydomain.dev」から来たように見せかけますか?

編集: ジェイソン-可変ドメインのトリックはサブドメインとまったく同じように達成されます...に基づいてアカウントのデータベースをクエリできる場合はrequest.subdomains.first、を介してドメインをクエリできますrequest.domain。不正な形式のURLを壊すリスクを最小限に抑えるために、大文字と小文字の区別などを再確認する必要があります。もちろん、ドメインレコードが最初にデータベースに存在することを確認する必要があります...

ああ-そしてドメインレコードリクエストを注意してキャッシュしてください...

つまり、同じアプリを提供できますが、スタイルやランディングページなどが異なります。幅広い顧客ベースを持つPaaSアプリに役立ちます。ブランドを変更して、あるグループの問題に対する特定のソリューションとして販売できます。下にある同じ内臓。

4

1 に答える 1

4

私は非常に似たようなことをしたいと思っています。テスト用にpowディレクトリを追加してから、powディレクティブを使用して環境をオーバーライドすることを考えました。これは、アプリディレクトリ内の「.powenv」内で行われると思います。クイックフィックスの例を次に示します。

echo export RAILS_ENV=cucumber > .powenv && touch tmp/restart.txt

ただし、テストを開始する前に、実行するenvをpowに指示し、スイッチバックが終了したら、一時的に別のポートでテストサーバーを実行できるように、動的な処理を行うことをお勧めします。Powは、サブドメインを処理するためにこれまでに知っている唯一の優れたソリューションです。

編集済み:これは現在、私の環境で機能しており、features / support/env.rbファイルに次のように追加されています。

# Switch Pow to For Cucumber Tests
Capybara.default_driver = :selenium # Subdomain testing will only work with pow and selenium
pow_config = "#{Rails.root}/.powenv" # Dont change, this is the Config Files Location.
pow_config_stash = "#{Rails.root}/.powenv_original" # This is what the config will be stashed as during testing.

Before do

  # Set the default host
  Capybara.app_host = "http://www.resipsa.dev"

  # Stash the existing config
  File.rename(pow_config,pow_config_stash) if File.exists? pow_config

  # Write the new pow config
  f = File.new("#{Rails.root}/.powenv", "w")
  f.write "export RAILS_ENV=test"
  f.close

  # Touch tmp/restart.txt to force a restart
  FileUtils.touch "#{Rails.root}/tmp/restart.txt"

end

After do

  # Delete the temp config
  File.delete(pow_config)

  # Restore the Original Config
  File.rename(pow_config_stash,pow_config) if File.exists? pow_config_stash

  # Touch tmp/restart.txt to force a restart
  FileUtils.touch "#{Rails.root}/tmp/restart.txt"

end
于 2012-05-21T23:12:13.327 に答える