【问题标题】:FactoryGirl error :warden with RSpec in Rails 4FactoryGirl 错误:在 Rails 4 中使用 RSpec 看守
【发布时间】:2015-09-12 21:24:19
【问题描述】:

当我测试我的规范之一时,我继续收到此问题:

Failure/Error: visit "/"
UncaughtThrowError:
uncaught throw :warden

下面是各个部分的代码:

#_spec.rb
require "rails_helper"

RSpec.feature "Users can create a new discussion" do
  before do
    login_as(FactoryGirl.create(:user))

    visit "/"
    click_link "Discussions"
    click_link "Start a discussion"
  end

  scenario "with valid attributes" do
    click_button "Post"
  end
end

#_factory.rb
FactoryGirl.define do
  factory :user do
    sequence(:email) { |n| "test#{n}@example.com" }
    password "password"
    sequence(:user_name) { |n| "User#{n}" }
    first_name "Test"
    last_name "User"
    country "United States"
    state "Nevada"
    city "Las Vegas"
  end
end

#rails_helper
config.include Warden::Test::Helpers, type: :feature
config.after(type: :feature) { Warden.test_reset! }

显然,测试在 _spec 文件中标记了访问行,但我不确定为什么。如果还有其他代码可以帮助我,请告诉我,谢谢!

更新

所以问题是因为我使用的是可确认的 Devise;但是,我不清楚如何通过测试确认用户。这是我可以放置在工厂或规范本身内的东西吗?我会认为规范本身?

【问题讨论】:

  • 您使用设计吗? login_as 是什么?
  • 可能重复:stackoverflow.com/questions/9482739/…。如果你使用Confirmable模块,你需要确认你的用户,否则Warden会报错。
  • Alex:我昨晚遇到了这个问题,但不确定这是否真的是问题所在,我如何通过测试确认用户。整个 Devise::TestHelpers 让我感到困惑。我刚刚验证过,这是可以确认的方面。我不明白如何在测试中确认用户。我可以在工厂内这样做还是必须在功能本身中提及?

标签: ruby-on-rails ruby-on-rails-4 testing rspec


【解决方案1】:

只需向用户发出一个简单的.confirm!,即:

before do
  user = FactoryGirl.create(:user)
  user.confirm!
  login_as(user)

  visit "/"
  click_link "Discussions"
  click_link "Start a discussion"
end

您似乎也缺少将 warden 设置为测试模式(将其放入 rails_helper):

RSpec.configure do |config|
  config.include Warden::Test::Helpers
  config.before :suite do
    Warden.test_mode!
  end
end

在此处查看其他详细信息:https://github.com/plataformatec/devise/wiki/How-To%3a-Test-with-Capybara

【讨论】:

  • 我在 rails_helper 中设置了守望者,这是我问题中的最后一个代码。除非你暗示我设置不正确?您对确认的建议虽然有效并且完全有意义。很傻,我没有意识到 =P 我谢谢你!
  • 只是我在您的问题中没有看到任何带有Warden.test_mode! 的行。看看我答案中的链接,看来你几乎正确地组合了所有部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多