Nano Hash - криптовалюты, майнинг, программирование

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: '[email protected]').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. Я что-то пропустил в файле спецификации? или, может быть, у меня неправильное объявление в пользовательской модели? Любая помощь приветствуется.

22.11.2018

Ответы:


1

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

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

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

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
22.11.2018
  • Ваш пример показал мне, что я забыл добавить пароль, который требуется и в модели разработки. Конечно, решение также заключалось в том, чтобы заменить параметр электронной почты переменной. 23.11.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..