ruby-on-rails - 尝试使用 factory girl 在我的 Rails 应用程序中测试用户登录时,创建操作时缺少模板错误

标签 ruby-on-rails testing capybara factory-bot minitest

当我尝试使用工厂测试我在 Rails 应用程序上的登录时,我不断收到缺少模板的错误。它期待我的创建操作的模板,即使我在我的 Controller 中有一个重定向。这是我的 session Controller :

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

关于可能导致此问题的任何想法?

最佳答案

很明显,当您使用 FactoryGirl 时, Controller 中的 if 条件评估为 false(也许 login 是返回 nil?)。由于您的重定向仅在条件 block 内,如果您错过了它,那么您将进入默认渲染。所以我不知道您的 login 方法是做什么的,因此无法告诉您为什么 userfalsenil,但在我看来这一定是正在发生的事情。尝试在条件的 else 子句中为现有 View 模板添加 redirectrender 并查看是否可以防止异常。

关于ruby-on-rails - 尝试使用 factory girl 在我的 Rails 应用程序中测试用户登录时,创建操作时缺少模板错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12958755/

相关文章:

ruby-on-rails - 尝试计算测验分数的百分比,Rails 3.0.3

javascript - CasperJS/PhantomJS ES6 Promise Polyfill

ruby-on-rails - Rails Minitest 没有运行测试类

ruby - Capybara-1.1.1 与 capybara 冲突 (~> 0.4.0)

ruby - 如何在 Capybara 中获取 DOM 元素的 HTML?

ruby-on-rails - 这个 rails 查询到底是如何工作的?

ruby-on-rails - ruby on rails 的语法错误

javascript - 使用 javascript 驱动程序运行 RSpec/Capybara 时数据库超时

javascript - 断言元素不在页面上