5

2つのカピバラテストがあります。1つはユーザーにサインインし、もう1つはログインしたユーザーだけが使用できる機能をテストすることを目的としています。

ただし、セッションがテスト間で維持されていないため、2番目のテストを機能させることができません(明らかに、そうあるべきです)。

require 'integration_test_helper'

class SignupTest < ActionController::IntegrationTest

  test 'sign up' do  
    visit '/'
    click_link 'Sign Up!'
    fill_in 'Email', :with => 'bob@wagonlabs.com'
    click_button 'Sign up'
    assert page.has_content?("Password can't be blank")
    fill_in 'Email', :with => 'bob@wagonlabs.com'
    fill_in 'Password', :with => 'password'
    fill_in 'Password confirmation', :with => 'password'
    click_button 'Sign up'
    assert page.has_content?("You have signed up successfully.")
  end

  test 'create a product' do
    visit '/admin'
    save_and_open_page
  end

end

save_and_open_page呼び出しによって生成されたページは、グローバルログイン画面であり、私が期待するような管理者のホームページではありません(サインアップはログインします)。私はここで何が間違っているのですか?

4

2 に答える 2

6

これが発生する理由は、テストがトランザクションであるため、テスト間で状態が失われるためです。これを回避するには、ログイン機能を関数に複製してから、再度呼び出す必要があります。

デフォルトログイン
  訪問 '/'
  fill_in 'メール', :with => 'bob@wagonlabs.com'
  fill_in 'パスワード', :with => 'パスワード'
  fill_in 'パスワード確認', :with => 'password'
  click_button 'サインアップ'
終わり

「サインアップ」をテストする
 ...
 ログインする
 assert page.has_content?("サインアップに成功しました。")
終わり

test 「製品を作成する」 do
  ログインする
  「/管理者」にアクセスしてください
  save_and_open_page
終わり
于 2011-01-19T18:06:54.563 に答える
3

各テストはクリーンな環境で実行されます。一般的なセットアップとティアダウンのタスクを実行したい場合は、 Rails ガイドsetupの説明に従ってとteardownメソッドを定義してください。

于 2011-01-19T18:06:09.433 に答える