用于电子邮件格式验证的RSpec失败

时间:2018-11-22 18:09:08

标签: ruby-on-rails rspec

我有带有验证的用户设计模型

class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable

  validates :first_name, presence: true, length: { maximum: 100 }
  validates :last_name, presence: true, length: { maximum: 100 }
  validates :email, presence: true, uniqueness: true, format: { with: /\A.+@.+\..+\z/ }
end

和RSpec文件来测试电子邮件验证

describe 'email field' do
  subject { User.new(first_name: 'jan', last_name: 'kowalski', email: 'jan@foo.com').valid? }

  context 'when email has wrong format' do
    let(:email) { 'jan@foo' }

    it 'complains for invalid format' do
      is_expected.to eq false
    end

    let(:email) { 'jan' }

    it 'complains for invalid format' do
      is_expected.to eq false
    end
  end

  context 'when email has correct format' do

    it 'accepts valid format' do
      is_expected.to eq true
    end
  end
end

我想测试用户模型中正确的电子邮件地址格式的验证。除最后一次出现错误expected: true got: false以外,所有测试均顺利通过。我是否错过了规范文件中的某些内容?还是我在用户模型中有错误的声明?欢迎任何帮助。

1 个答案:

答案 0 :(得分:1)

您的规范文件中有一些错误,无论如何,两封电子邮件始终无法执行。

如果您想要这种行为,则需要用一个变量替换主题中的email选项,第二秒钟将其包装在上下文中并放入let(:email)内,这就是rspec的方式将替换每个主题中的主题值。

这里有一个示例,但是使用了一个password变量,您的两个第一个测试也通过了,因为您缺少密码,以至于expec为false,但是他们没有测试您正在描述的测试。

describe 'password field' do
  subject { Usuario.new(nombre: 'jan', username: 'kowalski', password: password).valid? }

  context 'when password has wrong format' do
    let(:password) { nil }
    it 'complains for invalid format' do
      is_expected.to eq false
    end
  end

  context 'when password size is incorrect' do
    let(:password) { 'jan' }
    it 'complains for invalid format' do
      is_expected.to eq false
    end
  end

  context 'when password has correct format' do
    let(:password) { '1qaz2wsx' }
    it 'accepts valid format' do
      is_expected.to eq true
    end
  end
end
相关问题