Должно ли совпадение `validate_length_of` в RSpec с формой реформы - PullRequest
0 голосов
/ 09 апреля 2019

Я настраиваю спецификации для своих форм (используя Reform драгоценный камень) с RSpec и Shoulda Matchers драгоценными камнями.Я не могу понять, почему у меня проблемы с проверкой.

Мои фактические конфигурации:

  ruby '2.5.1'
  gem 'rails', '~> 5.2.0'
  gem 'rspec-rails', '~> 3.8'
  gem 'shoulda-matchers', '~> 4.0'
  gem 'reform-rails', '~> 0.1'

Я уже пробовал разные виды проверки длины в моей форме.Но ничто не делает вещи намного лучше.

Вот минимальная форма, используемая для тестирования:

# frozen_string_literal: true

class UserForm < Reform::Form
  # == Properties  ==========================================================
  property :nickname


  # == Validations ==========================================================
  validates :nickname, presence: true, length: { minimum: 3, maximum: 100 } 
end

Вот спецификация:

# frozen_string_literal: true

RSpec.describe UserForm, type: :model do
  subject { described_class.new(User.new) }

  it { is_expected.to validate_presence_of :nickname }
  it { is_expected.to validate_length_of(:nickname).is_at_least(3).is_at_most(100) }
end

Обратите внимание, что validate_presence_of matcher работает отлично.

У меня выводится RSpec:

  1) UserForm should validate that the length of :nickname is between 3 and 100
     Failure/Error: it { is_expected.to validate_length_of(:nickname).is_at_least(3).is_at_most(100) }

       Expected UserForm to validate that the length of :nickname is between
       3 and 100, but this could not be proved.
         After setting :nickname to ‹"xxx"›, the matcher expected the
         UserForm to be valid, but it was invalid instead, producing these
         validation errors:

         * nickname: ["is too short (at least 3 characters)"]

Я, очевидно, исключаю, чтобы эти виды валидации работали.

Я надеюсь, что смогу найти помощьздесь :) 1026 *

1 Ответ

0 голосов
/ 10 апреля 2019

Известно, что реформа не работает с горчичниками . По сути, все модели соответствия в musta-matchers работают следующим образом:

  • Создание нового экземпляра тестируемого класса.
  • Настройка атрибутов для этого экземпляра.
  • Вызов validate в этом случае.
  • Чтение любых возможных ошибок проверки из errors.

Однако Реформа не работает таким образом ; вы не устанавливаете свойства для объекта формы индивидуально, а затем вызываете valid?, вы вызываете validate со свойствами, которые вы хотите установить для объекта формы, и затем эти свойства проверяются в процессе установки. Вероятно, поэтому вы получаете эту ошибку - потому что musta-matchers пытается вручную установить свойства, а затем validate уносит их.

К сожалению, нельзя заставить помощников по работе с Reform работать без какого-либо адаптера. Мы не планируем добавлять это в жемчужину в ближайшее время, но мы возьмем пиар! Кроме этого, по всей видимости, команда реформистов говорила о том, чтобы сделать несколько совпадений RSpec в духе мафиозных совпадений, но я не уверен, насколько там был достигнут прогресс, если таковой имеется.

Извините, я не мог быть более полезным: /

...