0

現在、送信ボタンをクリックして before 句のフォームに入力する統合テストに問題があります。私はそれから使用します

it "has ..." do end

リダイレクトされたパスが正しいかどうかを確認します。ただし、最初の "it" ステートメントが完了すると、別のページにリダイレクトされ、そのページにいないため、連続するいくつかの "it" ステートメントは失敗します。

サンプル コード スニペットを次に示します。

...
context "when the correct information is entered" do
    before {
        fill_in 'Email', :with => 'test@test.test'
        fill_in 'Username', :with => 'some_user'
        fill_in 'Password', :with => 'Password'
        fill_in 'Password Confirmation', :with => 'Password'
        select 'foo', :from => 'user_type'
        click_button 'Save'
    }
    it "has valid html" do
        page.should have_valid_html
    end
    it "has current_path users/2" do
        current_path.should == users_path+'/2'
    end
...

したがって、ここでは、「有効な html を持っている」テストはパスしますが、「users/2」にとどまるのではなく「users」にリダイレクトされるため、2 番目のテストは失敗します。同様に、'it' ステートメントの順序を入れ替えても、同じ結果が得られます。

「前」を別の方法で行う必要がありますか、それとも他に考慮する必要があることはありますか?

助けてくれてありがとう、ボカ

編集:当然の情報です。選択フィールドがないことを除いて、コードの他の部分でもほぼ同じことを行いました。他のすべてのケースで機能した場合、それが問題になる可能性がありますか?

4

1 に答える 1

0

Capybara を使用する場合、トランザクション フィクスチャが機能しないことを覚えておくことが重要です。つまり、RSPEC は通常、テスト中にデータベースに加えられたすべての変更を「ロールバック」します (この場合は、各「it」ステートメントの後)。ただし、Capybara を使用する場合は、要素を手動で削除するか、Database Cleaner などのツールを使用してデータベースを切り詰める必要があります。

私のデータベースは電子メールごとに 1 人のユーザーしか処理しないため、これはここで重要です。

編集:

私の修正は、インデックス内の最後のユーザーで User.delete を呼び出すことでした。ただし、インデックスはリセットされず、次に作成されたユーザーが同じポイントからインデックスをインクリメントすることに注意してください。

コンテキストはロールバックされる可能性がありますが、そうではないことに注意してください。

于 2012-07-17T02:14:12.383 に答える