1

私はレールにかなり慣れていません。私は railstutorial (Rails 3.0) で作業しています。ある時点で、ユーザーのサインイン/サインアウト フローの統合テストを作成します。

describe "success" do
  it "should sign a user in and out" do
    user = Factory(:user)
    visit signin_path
    fill_in :email,    :with => user.email
    fill_in :password, :with => user.password
    click_button
    controller.should be_signed_in
    click_link "Sign out"
    controller.should_not be_signed_in
  end
end

私の理解では、テストでは db/test データベースが使用されます。私が知る限り、このデータベースは空です (を使用して開きましたrails console test)。Factory を使用して偽のユーザーを作成し、そのユーザーの名前と電子メールで正常に署名できるのはなぜですか?

RailsTutorial では次のように説明しています。

ここで before(:each) ブロックはサインイン ページにアクセスし、有効な電子メールとパスワードのペアを送信してサインインします。

なぜそれが有効なペアなのですか? 私は明らかに何かが欠けています。

サインインが機能していないように見えるので、これに特に興味があります。その理由を突き止めたいと思います。

4

1 に答える 1

2

そうです、各テスト例はtransaction内で実行され、現在の例で作成されたすべてのレコードはロールバックによって削除されるため、テスト データベースは空です。その目的は、各例を別の例から分離しておくことです。

しかし、現在の例が実行されているとき、データベースには FactoryGirl によって作成されたレコード (この場合は 1 つのレコード) が取り込まれます。工場で生成される電子メールとパスワードが何であれ、データベースとメモリ (user変数) の両方に永続化されます。だからこそ、user.password常に正しいでしょう。

于 2012-04-06T07:43:05.713 に答える