1

我一直试图让我的请求规范工作。我尝试了许多通过 Google 和 SO 找到的不同方法。以下是我在请求规范中单独尝试过的以下助手:

#spec/support/devise_request_spec_support.rb
module DeviseRequestSpecSupport

  def login(user)
    post user_session_path, login: user.email, password: 'foobar'
  end
end

#spec/support/utilities.rb
include ApplicationHelper

def valid_login(user)
  fill_in "user[email]", with: user.email
  fill_in "user[password]", with: 'foobar'
  click_button "Sign in"
end

def login(user)
  visit root_path
  valid_login(user)
end

我在#login下面的请求规范中分别尝试了上述两种方法:

require 'spec_helper'

describe "Company Admin Dashboard", js: true do
    let(:user) { Fabricate(:company_admin) }

    before do
        login(user)
        poll = Fabricate(:poll)
        poll.send_to_all_users
    end

  describe "interacting with the poll box" do
    it "displays sent poll in poll box" do
      visit root_path
    end
  end
end

测试将通过,但 root_path 不显示登录用户的登录页面。它显示了公共登录页面。我尝试使用 binding.pry 进行调试并尝试在测试环境中手动登录,但我不断收到“无效的电子邮件或密码”错误。我检查了很多次,但我一直在使用 Fabricated company_admin 的正确电子邮件和密码。

我也尝试过这里提出的解决方案:https ://github.com/plataformatec/devise/wiki/How-To:-Test-with-Capybara

任何帮助将不胜感激。不确定问题出在哪里。是 Fabrication gem、Devise、RSpec 还是 Capybara?

4

2 回答 2

0

您可以尝试使用“让!” 而不是“让”来创建用户。怀疑您尝试登录时尚未创建用户,因为您使用的是“let”的惰性版本。

于 2013-03-01T05:13:20.207 回答
0

我曾经有过同样的错误。我的错误突然出现,这是一个很大的惊喜。您应该注意到我有相同的宝石要测试:Devise、RSpec、Capybara 和 FactoryGirl(而不是 Fabrication)。

但是我们的问题之间存在差异:我的错误突然出现,所以我只是创建了一个单独的分支,我将 master 恢复到以前的提交,我发现我以某种方式更改了 spec_helper.rb(我实现了禁用垃圾收集器)。我恢复了提交,然后我的测试通过了。

我想你可以尝试接下来的事情:

1) 通过运行确保您用于测试的所有 gem 都是最新的bundle outdated

2)尝试更改visit root_pathvisit '/'

3)启动rails c test,创建一个测试用户并确保保存的密码与测试的密码匹配。在这里查看如何做到这一点

4) 如果没有任何帮助,请尝试使用 FactoryGirl 而不是 Fabrication

于 2013-04-20T14:44:20.427 回答