1

問題の解決策が見つかりません: rspec test でユーザーをログインできません

このリンクをたどって、このコードを試しました - https://github.com/plataformatec/devise/wiki/How-To:-Stub-authentication-in-controller-specs

require 'spec_helper'
require 'factory_girl_rails'

describe "ololo" do

it "blocks unauthenticated access" do

 user = User.create(email: "lol@mail.com", password: "123456")
 request.env['warden'].stub(:authenticate!).
 and_throw(:warden, {:scope => :user})

  visit "/tasks"

  page.should have_content("Signed in successfully.")

end
end

/エラー/

Failure/Error: page.should have_content("Signed in successfully.")
   expected there to be text "Signed in successfully." in "Task App Home Login You need to sign in or sign up before continuing. Sign in Email Password Remember me Sign upForgot  

あなたのパスワード?Denys Medinskyi による Task App"

このリンクも試しました - http://codingdaily.wordpress.com/2011/09/13/rails-devise-and-rspec/

Devise wiki チュートリアルも機能しません。

お願いします、私はほとんど立ち往生しています。誰か助けて。

4

1 に答える 1

1

エラーメッセージが表示されない場合、考えられる理由の1つは、dbをテストするためのユーザーのハードレコードを作成したことです。このテストを1回実行したことがあるため、2回目は、同じ電子メールのレコードが存在するため、この作成は失敗します。

FactoryGirlが必要です。FactoryGirlを使用してフィクスチャデータを作成してみませんか?

spec/factories/user.rb

FactoryGirl.define do
  factory :user do
    email: "lol@mail.com"
    password "123"
  end
end

あなたのテストでは、

FactoryGirl.create(:user)

追加

ツタンカーメンと比較すると、2つのステップがありません。

  1. 上記のように、ハードに作成されたレコードを置き換えるには、FactoryGirlを使用する必要があります。
  2. sign_inプライベートページにアクセスする前に、この手順を実行する必要があります。

テスト後にデータベースをクリアした場合にのみ、#2でうまくいくかもしれません。とにかく、ハードデータよりもファクトリデータをお勧めします。

于 2013-02-18T18:43:35.233 に答える