0

ファクトリを使用して Rails アプリでログインをテストしようとすると、テンプレートが見つからないというエラーが発生し続けます。コントローラーにリダイレクトがありますが、作成アクションのテンプレートが必要です。これが私のセッションコントローラーです:

class SessionsController < ApplicationController
  def new
  end

  def create
    user = login(params[:email], params[:password], params[:remember_me])
    if user
      redirect_back_or_to dashboard_path, :success => "Logged in!"
    else
      flash.now.alert = "Email or password was invalid."
    end
  end

  def destroy
    logout
    redirect_to root_url, :notice => "Logged out!"
  end
end

そして私のgemfile:

source 'https://rubygems.org'

gem 'rails', '3.2.8'
gem 'jquery-rails'
gem 'pg'
gem 'heroku'
gem 'taps'
gem 'simple_form'
gem 'bootstrap-sass'
gem 'sorcery'

group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'
  gem 'uglifier', '>= 1.0.3'
end

group :test do
  gem 'minitest'
  gem 'capybara'
  gem 'capybara_minitest_spec'
  gem 'turn'
  gem 'factory_girl_rails'
end

私の工場.rb:

FactoryGirl.define do
  factory :user do
    sequence(:email) { |n| "foo#{n}@example.com" }
    password "secret"
    password_confirmation "secret"
  end
end

そして、ここに私のテストがあります:

「test_helper」が必要

describe "Login integration" do
  it "logs in a user successfully" do
    user = FactoryGirl.create(:user)
    visit login_path
    fill_in "Email", :with => user.email
    fill_in "Password", :with => user.password
    check "Remember me"
    click_button "Log in"
    current_path == "/dashboard"
    page.text.must_include "Logged in!"
    page.text.must_include "Your Dashboard"
  end

end

しかし、そのテストを実行すると、次のエラーが発生します。

 Missing template sessions/create, application/create with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}.

代わりに、factory girl を使用しない場合は、次のように問題なく動作します。

「test_helper」が必要

describe "Login integration" do
  it "logs in a user successfully" do
    visit signup_path
    fill_in "Email", :with => "joey@ramones.com"
    fill_in "Password", :with => "rockawaybeach"
    fill_in "Password confirmation", :with => "rockawaybeach"
    click_button "Create User"
    current_path == "/"
    page.text.must_include "Signed up!"
    visit login_path
    fill_in "Email", :with => "joey@ramones.com"
    fill_in "Password", :with => "rockawaybeach"
    check "Remember me"
    click_button "Log in"
    current_path == "/dashboard"
    page.text.must_include "Logged in!"
    page.text.must_include "Your Dashboard"
  end

end

これを引き起こしている可能性のあるアイデアはありますか?

4

1 に答える 1

1

使用時に何が起こっているかFactoryGirlif、コントローラーの条件が false と評価されている (おそらく?loginを返しているnil) ことであることは明らかです。リダイレクトは条件付きブロック内にのみあるため、それを見逃すと、デフォルトのレンダリングに失敗します。だから私はあなたのメソッドが何をしているのか分からないのでlogin、なぜ かなのかuserはわかりませんが、それが起こっているに違いないと私には思えます。条件文の句に既存のビュー テンプレートのorを追加してみて、それが例外を防ぐかどうかを確認してください。falsenilredirectrenderelse

于 2012-10-18T17:33:54.633 に答える