Factory.create не работает в контексте Put, но не в контексте Post

Я использую factorygirl. Я все еще новичок, в частности, в аспекте тестирования рельсов.

Когда я описываю создание POST, я могу без проблем создать любое количество объектов Person. На самом деле мне не нужно создавать его здесь, поскольку я обычно просто заглушаю действительный? метод Лица. Но с целью решения этого вопроса я закинул его туда. Независимо от того, находится ли этот Factory.create(:person) в контексте создания POST (или сколько раз я его там использую), он выдает неописательное сообщение об ошибке, когда я использую его в контексте обновления PUT.

Кроме того, я удалил все проверки из модели без изменения результата.

Я в растерянности.

Давайте просто заработаем основы:

describe PeopleController do
    describe "POST create" do
      describe "with valid params" do
        it "creates a person from params and renders persons/_form partial" do
            f = Factory.create(:person)
        #    f = Factory.create(:person)
        #    f = Factory.create(:person)
        end
      end
    end

    describe "PUT update" do
      describe "with valid params" do
        it "updates the requested person" do
            f = Factory.create(:person)        #error when running rake spec
        end
      end
    end
end    

Ошибка:

 Failure/Error: f = Factory.create(:person)
 ActiveRecord::RecordInvalid:
   Validation failed: 

Модель

class Person < ActiveRecord::Base
end

person recursive_acronym    schedule 16.04.2011    source источник
comment
Было бы полезно увидеть файл определения фабрики и код модели Person.   -  person Jim Morris    schedule 17.04.2011


Ответы (1)


Я почти уверен, что ваша фабрика не соответствует требованиям проверки. В вашем определении фабрики ваша фабрика должна быть в состоянии пройти все проверки. В противном случае вы должны явно выполнить их, например:

f = Factory(:person, :attribute => value_that_passes_validation, ...)

РЕДАКТИРОВАТЬ (последовательности):

Factory.define :user do |f|
    f.sequence(:username) { |n| "test#{n}" }
    f.password "1234567890"
    f.sequence(:email) { |n| "test#{n}@test.com" }
end
person Spyros    schedule 16.04.2011
comment
Я понимаю, что запись считается недействительной. Вопрос в том, почему так кажется только при тестировании в этом контексте? Я могу создать любой номер в контексте создания POST, но в контексте обновления PUT первый, который я создаю, всегда недействителен. И более того, почему не дает описание ошибки? Хм - person recursive_acronym; 17.04.2011
comment
ааа, должно быть, вы не используете последовательность для своей Фабрики. Если вы проверяете уникальность, вы должны использовать последовательности. я вставляю выше - person Spyros; 17.04.2011
comment
Я не думаю, что это так. В моей модели или в моей базе данных нет ограничений. И даже если бы это было так, он должен был бы сказать мне, что в строке ActiveRecord::RecordInvalid: ..., но она пуста. Наверное, это какая-то нелепая глупость :) - person recursive_acronym; 17.04.2011
comment
Но вы получаете ошибку проверки: O У вас нет проверки модели Person? Можете ли вы также вставить свой заводской код? - person Spyros; 17.04.2011