2011-07-11 7 views
2

私はrspec2(2.6.4)、capybaraとseleniumでテストしているアプリケーションを持っています。異なる答えを与えるautotestとrspec

rspecで任意の要求仕様を直接実行すると、テストに合格します。

私は彼らのすべてがIDを持つユーザー= **を見つけることができません」というメッセージで失敗する自動テストで要求仕様を実行します。

自動テストは、自動的に最初の要求のテストを再ロードし、それが通過すると

オートテストは、すべてのテストを再ロードし、それが要求テストに達したときに、それらすべてが再び失敗

ユーザーは、工場出荷時の少女によって作成され、中に記録されています

before(:each) do 
    @user = Factory(:user) 
    login_as @user 
end 

after(:each){ 
    logout 
    } 

とスペックヘルパーに私は

def login(user) 
    post login_path, :login => user.login, :password => 'testing' 
end 
を持って次のように工夫を使用して210

これらは私がインストールされている関連の宝石(グループ:テスト)です

gem "rspec" 
    gem "rspec-rails" 
    gem "autotest-rails" 
    gem "selenium-webdriver", ">= 0.2.2" 
    gem 'capybara', :git => 'git://github.com/jnicklas/capybara.git' 
    gem 'launchy' 
    gem 'database_cleaner' 

これは、しばらくの間、今私に不可解されています - 任意の考えを誰が?スタックトレースを調べて、2つの呼び出しが異なるところを調べる方法についてのあらゆる考えはありますか?

+0

'autotest'があなたの' spec_helper.rb'をロードするために失敗していますか? –

+0

hmmm - これは考えです - 他のテストに必要なものはスペックヘルパーには何もありません - 私はデバッグをスティックして見ます...ありがとう – chrispanda

+0

提案に感謝しますが、悲しいことではありませんそれは...しかし、私が行ってきたデバッグから明らかになっているのは、問題はログインしているユーザーではなく、テストで作成されているので、トランザクションと何かを見始めているということです... – chrispanda

答えて

2

解決済み。実際にここで起こっていることは謎のままですが、ここでは問題が本当に何であるか、そしてどのように解決したのかを正確にまとめています。 Autotestは問題ではありません - 問題はすべてのテストを1つのバッチで実行していることです。 rspec spec/**/*を実行すると、同じエラーが発生します。これは、テストの間にデータベースを適切にクリーンアップできなかったことが問題であるという手掛かりです。私はdeviseを使用しており、最終的にはラックベースの認証のための管理者に頼っています。ワーデンの文書に続いて、私はWarden.test_resetを呼び出しました! after(:suite)ブロック内にあります。これをafter(:all)ブロックに移動すると、個別に実行されても、要求テストとして実行されようと、1つのブロック内のすべてのテストに実行されても、テストは同じ結果を返します。

私たちは何を学びましたか?私は問題は(少なくとも私にとって)最終的にrspecフックの混乱した命名によって引き起こされたと思います。ホテルの部屋の「スイート」は、ホテルの部屋の「すべて」よりも少ないと思います。しかし明らかに、rspecの例の「スイート」は、「すべて」の例にすぎません。実際、rspecの例は、単に「specディレクトリのすべての例」です。彼らがすべて動かされた後に掃除所を掃除することは効果がありません。それぞれの仕様の後にそれらをクリーンアップし、test_resetを実行する必要があります。 after(:all)ブロックでこれは誰かに役立ちます

希望...

+0

after(:all)は、各テストの後に実行されません。すべてのテストが完了した後、1回実行されます。あなたはおそらくtest_resetを呼びたいと思うでしょう!後(:各)ブロックで。 –

関連する問題