Проверка рельсов для проверки длины: единица измерения
Я только начинаю тестирование на 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]
Тогда ваш тест пройдет.