-1

既存のアプリケーションの統合テスト ケースをいくつか書いています。「it」ブロックが 1 つしかない場合、テストは正常に機能します。ただし、複数の「it」ブロックを追加すると、エラーがスローされます。以下は動作する私のコードです:

require 'spec_helper'
describe 'Group' do
  before do
    visit 'http://groups.caremonkey.com/users/sign_in'
    fill_in "Email", :with => "email@example.com"
    fill_in "Password", :with => "password"
    click_button "Login"
    page.should have_link('Account')
  end
  it 'Should check all the links and functionality of groups' do
    #add new subgroup with valid data should save a new group
    find("#group-squares").click_link("Add")
    fill_in "Group Name", :with => "Melbourne futsal"
    click_on("Save")
    page.should_not have_content("can't be blank")
    page.execute_script("parent.$.fancybox.close();")
    page.should have_link('Account')

    #test edit group: should be able to update group info provided valid data are given
    first(".actual img").click
    page.should have_content("Group")
    page.should have_link("Cancel")
    fill_in "Group name", :with => "Futsal club"
    page.execute_script("$('#sub-group-color-options').find('.color23').click()")
    click_button "Save"
    click_on("Cancel")
    page.should have_link('Account')
  end
end

すべての ' it ' ブロックを 1 つの 'it' ブロックにまとめると、完全に正常に動作します。しかし、それらを別の「it」ブロックに分割すると、機能しなくなります。たとえば、これを分割した場合 (「テスト編集グループ: 有効なデータが提供されている場合、グループ情報を更新できるはずです」) 次のように、テスト ケースを個別の 'it' ブロックに分割します。

 require 'spec_helper'
 describe 'Group' do
   before do
     visit 'http://groups.caremonkey.com/users/sign_in'
     fill_in "Email", :with => "email@example.com"
     fill_in "Password", :with => "password"
     click_button "Login"
     page.should have_link('Account')
   end
   it 'add new subgroup with valid data should save a new group' do
     find("#group-squares").click_link("Add")
     fill_in "Group Name", :with => "Melbourne futsal"
     click_on("Save")
     page.should_not have_content("can't be blank")
     page.execute_script("parent.$.fancybox.close();")
     page.should have_link('Account')
   end

   it 'should be able to update group info provided valid data are given' do
     first(".actual img").click
     page.should have_content("Group")
     page.should have_link("Cancel")
     fill_in "Group name", :with => "Futsal club"
     page.execute_script("$('#sub-group-color-options').find('.color23').click()")
     click_button "Save"
     click_on("Cancel")
     page.should have_link('Account')
   end
 end

次にrspecが失敗し、最初のテストに合格しますが、2番目のテストは次のエラーをスローして失敗します。

Failure/Error: visit 'http://groups.caremonkey.com/users/sign_in'
 ActionController::RoutingError:
   No route matches [GET] "/users/sign_in"

もう 1 つ、リモート (url: http://groups.caremonkey.com/ ) ですべての機能をテストする必要があります。なぜなら、私は既存のアプリケーションの統合テストを書いているからです。さらに、アプリケーションの残りの機能をテストする前に、システムにログインする必要があります。よろしくお願いします。

4

2 に答える 2

1

リモートサーバーを呼び出すためのカピバラのドキュメントに従っていますか? 次のものが必要です。

Capybara.current_driver = :selenium # Or anything but rack_test, probably
Capybara.run_server = false # Don't run your app in-process
Capybara.app_host = 'http://groups.caremonkey.com/'

私の推測では、一度サイトにアクセスすると、その後のvisit呼び出しは相対ルートを使用しようとし、それがデフォルト サーバーにルーティングされます。ActionController::RoutingErrorなんらかのラック サーバーを実行していないのに、なぜ が得られるのか、私には考えられません。これらのテストを他の Rails アプリケーションで実行していますか?

于 2013-11-14T13:33:06.803 に答える
0

私はこのようなものを推測します:

require 'spec_helper'
describe 'Group' do
  before do
    visit 'http://groups.caremonkey.com/users/sign_in'
    fill_in "Email", :with => "email@example.com"
    fill_in "Password", :with => "password"
    click_button "Login"
    page.should have_link('Account')
    find("#group-squares").click_link("Add")  #apperently both specs are "scoped" to this page
  end

  it 'Should check all the links and functionality of groups' do
    fill_in "Group Name", :with => "Melbourne futsal"
    click_on("Save")
    page.should_not have_content("can't be blank")
    page.execute_script("parent.$.fancybox.close();")
    page.should have_link('Account')
  end

  it "test edit group: should be able to update group info provided valid data are given"
    first(".actual img").click
    page.should have_content("Group")
    page.should have_link("Cancel")
    fill_in "Group name", :with => "Futsal club"
    page.execute_script("$('#sub-group-color-options').find('.color23').click()")
    click_button "Save"
    click_on("Cancel")
    page.should have_link('Account')
  end
end

私の直感は、両方のテストがこれに従う必要があることを教えてくれます:find("#group-squares").click_link("Add")だから私はそれを before ブロックに追加しました。

于 2013-11-08T14:55:41.503 に答える