rspe c Тестирование канадских почтовых индексов с помощью регулярных выражений и какие другие хорошие тесты для rspe c для операций CRUD - PullRequest
0 голосов
/ 17 апреля 2020

Я провожу тестирование по rspe c для канадского почтового индекса. Он должен пройти тест, если он соответствует формату регулярных выражений. Ниже мой код

require 'rails_helper'

RSpec.describe Postal, type: :model do
  context 'validation tests' do

       it 'should match regex form' do
      postal=(Postal.new(postalcode: 'V5A1S6'))
      expect((postal.postalcode).to match(/\A^(?!.*[DFIOQU])[A-VXY][0-9][A-Z] ?[0-9][A-Z][0-9]$\z/))

    end
  end
end

Однако я получаю это сообщение об ошибке.


  1) Postal validation tests should match formatting
     Failure/Error: expect((postal.postalcode).to match(/\A^(?!.*[DFIOQU])[A-VXY][0-9][A-Z] ?[0-9][A-Z][0-9]$\z/))

     ArgumentError:
       bad value for range
     # ./spec/models/postal_spec.rb:22:in `block (3 levels) in <main>'

Что я должен сделать, чтобы заставить его пройти проверку регулярного выражения? я не уверен, какая часть кода неправильная, или есть ли лучшее решение для проверки регулярных выражений в rspe c.

Потому что в моей модели проверки у меня это есть, и регулярное выражение работает отлично.

  validates :postalcode, presence: true, length: {minimum: 6, maximum: 6},  format: { with: /\A^(?!.*[DFIOQU])[A-VXY][0-9][A-Z] ?[0-9][A-Z][0-9]$\z/}

Также мне было любопытно. Какие другие хорошие тесты rspe c будут иметь смысл при тестировании канадского почтового индекса или любых других почтовых индексов. Все, что я знаю до сих пор, это тестирование границ символов и формата регулярных выражений.

1 Ответ

0 голосов
/ 17 апреля 2020

Полагаю, у вас работает Regex, вот как вы должны проверить валидацию в Rspe c

RSpec.describe Postal, type: :model do
  context 'canadian postal code' do
    let(:postal) { Postal.new(postalcode: 'V5A1S6') } # ideally should use factory like FactoryGirl

    it 'record is valid' do
      expect(postal).to be_valid

      # same as above but more explicit
      expect(postal.valid?).to be_truthy

      # even more explicit
      expect(postal.valid?).to eq true
    end
  end

  context 'invalid postal code' do
    let(:postal) { Postal.new(postalcode: '382481') } # ideally should use factory like FactoryGirl

    it 'record is invalid' do
      expect(postal).to be_invalid

      # same as above but more explicit
      expect(postal.valid?).to be_falsey
      expect(postal.invalid?).to be_truthy

      # even more explicit
      expect(postal.valid?).to eq false
      expect(postal.invalid?).to eq true
    end
  end
end

Я настоятельно рекомендую прочитать следующие ссылки.

Ссылка:

  1. действительно? и недействительно?
  2. RSpe c: сопоставители предикатов
...