使用RSpec和工厂女孩测试控制器,不能签名

时间:2014-03-19 22:41:48

标签: ruby-on-rails rspec tdd factory-bot

我似乎无法让sign_in工作,有人能看到我出错的地方吗?

require 'spec_helper'

describe CustomersController do

    before(:each) do
        @user = create(:user)
        sign_in @user
    end

    describe 'GET /customers' do
        it 'should be loaded successfully' do

            visit customers_path
            page.should have_content 'Customers'

        end

    end
end

和工厂

FactoryGirl.define do 

    factory :user do

        sequence(:email) { |n| "test{n}@test.com"} 
        password "testpass"
        password_confirmation { |u| u.password }
        account
    end

    factory :account do
        name "Test Account"
    end
end

测试失败,并显示您需要登录的内容。这表明sign_in @user无法正常工作?

  
    

故障:

  
     

1)CustomersController GET / customers应该成功加载        失败/错误:page.should has_content'Customers'          预计将在“切换导航主页套餐和价格功能免费试用”中找到文本“客户”联系我们登录请签名   in×您需要先登录或注册才能继续。记住账号   注册忘记密码?关于我们我们的使命使用条款隐私   策略开发人员加入Team API SERVICES现场安装   链接OpenWeigh主页包装信息价格文档登录TALK TO   美国Twitter Facebook YouTube GitHub向我们发送电子邮件©2014 OpenWeigh   版权所有。 OpenWeigh是IGPython集团的一部分“        #./spec/controllers/customers_controller_spec.rb:14:in块中的“块(3级)”

     

完成0.72874秒1例,1次失败

1 个答案:

答案 0 :(得分:0)

因为sign_in是一个Devise方法,所以这个答案假定你使用Devise进行用户身份验证。

Devise建立在Warden之上。通过包含Warden的测试助手方法,您可以访问login_as,其用途相同。尝试在规范中添加以下内容:

include Warden::Test::Helper
Warden.test_mode!

before(:each) do
  @user = FactoryGirl.create(:user)
  login_as(@user)
end

在Devise的存储库文档中进一步阅读:How To Test with Capybara

使用Rails 4.1,RSpec 2.14和Devise 3.2进行测试。