Я не хочу, чтобы rspec позволял мне сохранять два объекта класса с тем же именем, но это так. Есть что-то, что мне не хватает?Rspec игнорирует проверку уникальности
Моя модель:
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 image'
}
end
мой тест:
describe "when creating products with identical names" do
let(:book1) { FactoryGirl.create(:product, title: 'identical') }
let(:book2) { FactoryGirl.build(:product, title: 'identical') }
it "raises unique validation error" do
expect(book2).not_to be_valid
end
end
это то, что я получаю:
1) Product when creating products with identical names raises unique validation error
Failure/Error: expect(book2).not_to be_valid
expected #<Product id: nil, title: "identical", description: "Some crazy wibbles, that are fun", image_url: "freddie_mercury.jpg", price: #<BigDecimal:7f995cdd1358,'0.5699E2',18(27)>, created_at: nil, updated_at: nil> not to be valid
Я могу даже написать два раза FactoryGirl.create, он просто экономит ,
Однако, если я переключусь на консоль рельсов и попытаюсь создать два объекта с двумя идентичными именами, я получаю сообщение об ошибке. Что-то не так с моей тестовой средой?
спасибо! Правильно ли я понимаю, что блок let() не выполняет по существу действие внутри блока? Итак, в основном в book1 я просто сохранил действие вместо того, чтобы выполнять это действие? – mohnstrudel
На самом деле, что «пусть» вы можете представить как «регистрацию» метода имени, указанного как символ, поэтому 'let (: book1) {...}' позволяет вызывать 'book1' в ваших тестах. Пока вы не вызовете метод, тело блока не будет выполнено. Вы можете проверить это, если в вашем исходном коде вы выполнили что-то вроде 'before {book1}' или в вашем блоке 'it', просто называемом' book1', перед 'expect (book2) .not_to be_valid'. Однако ни один из них не кажется читаемым. –
Удивительный! Спасибо (-: – mohnstrudel