Почему мой тест Rspec на проверку длины не удался? (Рельсы / охранник / RSpec)
У меня есть очень простой тест на модели сделки, который продолжает терпеть неудачу, и я не могу понять, почему.
Моя модель сделки:
class Deal < ActiveRecord::Base
belongs_to :admin_user, :foreign_key => 'admin_user_id'
attr_accessible :url_path,
:country,
:title,
:description,
:twitter_msg,
:image_url,
:prelaunch_date,
:deal_launch_date,
:deal_end_date,
:featured,
:admin_user_id
:as => :admin_user
validates :title,
presence: true,
length: { maximum: 200 }
Тест:
require 'spec_helper'
describe Deal do
let(:admin_user) { FactoryGirl.create(:admin_user) }
before(:each) do
@attr = {
url_path: "lorem ipsum",
country: "France",
title: "lorem ipsum",
description: "lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum",
twitter_msg: "lorem ipsum",
image_url: "lorem ipsum",
prelaunch_date: 1.days.from_now.change(hour: 10),
deal_launch_date: 3.days.from_now.change(hour: 10),
deal_end_date: 15.days.from_now.change(hour: 10),
featured: true,
admin_user_id: 1
}
конец
describe "tests on deal models validations for TITLES" do
it { should validate_presence_of(:title) }
it { should_not allow_value(" ").for(:title) }
it "should reject deals with title that is too long" do
long = "a" * 201
hash = @attr.merge(:title => long)
Deal.new(hash).should have(1).error_on(:title)
end
end
и тест не пройден с "Тесты сделок на валидации моделей сделок для TITLES должны отклонять сделки с слишком длинным заголовком. Ошибка / Ошибка: Deal.new(hash).should have(1).error_on(:title) ожидал 1 ошибку на:title, got 2 => Я не понимаю, почему у меня 2 ошибки. Я должен получить только одну, и мой тест будет пройден!
Самое странное:
- когда я делаю rspec spec
он терпит неудачу - тогда, если я изменяю число проверок на 195, а в моем тесте на 196, то он проходит - но затем, когда я в следующий раз перезапускаю охрану или мой сервер, он снова терпит неудачу, и если я снова изменяюсь на 190 и 191, он снова работает, но как только я перезагружаю охрану или мой сервер
Я пробовал это много раз, и это всегда одна и та же проблема. Я не понимаю, похоже охранник или мой сервер это проблема.
Кто-нибудь знает, почему это происходит и как я могу это исправить?
2 ответа
Вы можете использовать musta matcher для проверки валидации:
it { should ensure_length_of(:title).is_at_most(200) }
С установленным камнем Следует, что вы можете сделать:
it { should validate_length_of(:title).is_at_most(200) }