2013-09-11 7 views
1

Я пытаюсь проверить «Продукт может получить список пользователей, которые оставили отзывы без дублей»Проверка Rspec для дубликатов?

это то, что мой тест выглядит

product_spec.rb

describe Product do 

let!(:product) { Product.create } 
. 
.#other test 
. 

    it "can list users that review it without duplicates" do 
    product.reviews.create({user_id: 1, review: "test"}) 
    product.reviews.create({user_id: 1, review: "test2"}) 

    product.user.uniq.count.should eq(1) 
    end 
end 

терминал результат

1) Product can list users that review it without duplicates 
Failure/Error: product.reviews.create({user_id: 1, review: "test"}) 
ActiveRecord::RecordNotSaved: 
    You cannot call create unless the parent is saved 
# ./spec/models/product_spec.rb:49:in `block (2 levels) in <top (required)>' 
+0

product.save => boolean – apneadiving

+0

Вам нужно поделиться больше своего кода, включая все, что связано с созданием 'продукта' в вашем тесте. –

ответ

1

проблема заключается в этой строке:

product.save.reviews.create 

Save возвращает boolean, был ли объект сохранен успешно или нет. Вы должны разделить это на две линии:

product.save 
product.reviews.create 
+0

, и я предлагаю использовать 'save!' И 'create!', Чтобы поймать, если некоторые записи не могут быть сохранены из-за проблем с проверкой. – gotva

0

Вы пытаетесь создать отзыв на товар, который не был сохранен с:

product.reviews.create() 

Я угадывание product не действует , таким образом, он не был спасен

let!(:product) { Product.create } 

который просто возвращает неверный объект, если create не удается.

Вы должны

  1. Используйте create!, чтобы убедиться, что вы обратите внимание при сохранении объекта не удается (это будет вызывать исключение, если есть ошибка проверки).
  2. Удостоверьтесь, что ваш Product может быть создан с данными, которые вы предоставляете.
+0

вы говорите: (он будет вызывать исключение вместо того, чтобы возвращать false), «create» не возвращает false, если сбой объекта сохранения невозможен, вместо этого он возвращает недопустимую объектную модель. – medBo

+0

Действительно. Исправил мой ответ. –

Смежные вопросы