Rails - 登录测试失败

时间:2017-05-11 02:57:03

标签: ruby-on-rails ruby capybara factory-bot factory

由于错误的电子邮件或密码,测试失败,即使我创建了一个新帐户并立即使用

继承文件

规格/工厂/ admins.rb

  FactoryGirl.define do
      factory :admin do
        email 'admin@example.com'
        password ('a'..'z').to_a.shuffle.join
      end
  end

规格/特征/ sign_in_spec.rb

require 'rails_helper'

describe 'Login', js: true do
  admin = FactoryGirl.create(:admin)
  it 'I can sign in' do
     visit '/admins/sign_in'
     fill_in 'Email', :with => admin.email
     fill_in 'Password', :with => admin.password
     click_button 'Log in'
     expect(page).to have_content('Signed in successfully')
  end
end

2 个答案:

答案 0 :(得分:0)

在阻止之前保持bkgd,然后尝试。

    curses.init_pair(1, 2, 6)
    scr.bkgd(curses.ACS_CKBOARD, curses.color_pair(1))
    scr.erase()
    scr.bkgdset(' ', curses.color_pair(1))
    scr.addstr(10, 0, 'Hello, world!', curses.color_pair(0))

现在将此admin = FactoryGirl.create(:admin)用于您的测试块。

答案 1 :(得分:0)

Hasanuzzaman的解决方案是正确的,但您可能会从解释原因中受益。

当您的规范被读入时,它所做的只是定义测试。它们实际上并不是立即运行的。通过使admin = FactoryGirl.create(:admin)行在定义测试时执行,而不是在测试运行时执行。这意味着它已经在测试开始时清除数据库之前运行,因此记录实际上并不存在于测试中。通过将其移动到之前的块,它实际上不会运行,直到测试实际运行。

describe 'Login', js: true do
  before do
    @admin = FactoryGirl.create(:admin)
  end

  it 'I can sign in' do
     visit '/admins/sign_in'
     fill_in 'Email', :with => @admin.email
     fill_in 'Password', :with => @admin.password
     click_button 'Log in'
     expect(page).to have_content('Signed in successfully')
  end
end