Ошибка RSpec для проверки формата электронной почты - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть модель пользовательского устройства с проверками

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 голосов
/ 22 ноября 2018

у вас есть ошибки в вашем файле спецификации, два письма электронной почты не выполняются в любом случае.

если вы хотите, чтобы такое поведение, вам нужно заменить параметр электронной почты в вашей теме на переменную, и вашво-вторых, вам нужно обернуть его в контекст и вставить в него let (: email), это способ, которым rspec заменит значение вашего предмета в каждом из них.

Вот пример, но с использованиемпеременная пароля, также проходят два ваших первых теста, потому что вы пропускаете пароль таким образом, что ваш expec ложен, но они не тестируют тест, который вы описываете.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...