Проверка рельсов для проверки длины: единица измерения

Я только начинаю тестирование на Rails и использую встроенный "язык" тестирования в отличие от Rspec. Что касается моей жизни, я не могу понять, почему это все еще не удается.

test "product title is at least 10 chars long" do
    product = Product.new(description: 'yyy',
                          image_url: 'zzz.jpg',
                          price: 1)
    product.title = 'testitout'
    assert product.invalid?
    assert_equal ['title must be at least 10 chars long'], product.errors[:title]

    product.title = 'testitoutt'
    assert product.valid?
end

А вот и Product.rb

class Product < ActiveRecord::Base
  validates :title, :description, :image_url, presence: true
  validates :price, numericality: {greater_than_or_equal_to: 0.01}
  validates :title, uniqueness: true
  validates :image_url, allow_blank: true, format: {
    with: %r{\.(gif|jpg|png)\Z}i,
    message: 'must be a URL for GIF, JPG, or PNG'
  }
  validates :title, length: { minimum: 10 }
end

вот что говорит мне мой терминал.

1) Failure:
ProductTest#test_product_title_is_at_least_10_chars_long [/test/models/product_test.rb:62]:
--- expected
+++ actual
@@ -1 +1 @@
-["Title is too short (minimum is 10 characters)"]
+[]


5 runs, 23 assertions, 1 failures, 0 errors, 0 skips

0 ответов

Я тоже только учусь этому, и вот что я нашел, решил это.

Сообщение в строке подтверждения должно соответствовать тому, что выводится Rails в браузере (за исключением части заголовка).

Таким образом, в браузере, когда ваш заголовок слишком короткий, мигает это сообщение об ошибке:

Таким образом, текст, который мы можем проверить: "слишком короткий (минимум 10 символов)"

Сделайте вашу строку assert_equal:

assert_equal ['is too short (minimum is 10 characters)'], product.errors[:title]

Тогда ваш тест пройдет.

Другие вопросы по тегам