2012-06-06 4 views
0

Вот моя Lesson модель:результаты RSpec и Rails консоли ведет себя по-разному

before_create :set_sequence 

def set_sequence 
    maxseq = Lesson.where(:course_id => self.course_id).maximum("sequence") 
    if (maxseq.nil?) 
    maxseq = 0 
    end 
    self.sequence = maxseq + 1 
end 

, когда я бегу rspec следующий тест не пройден:

it "validate sequence is setup" do 
    lesson = Lesson.create(:title => "Testing", :description => "Testing", :course_id => 1) 
    lesson.sequence.should_not eql nil 
end 

Однако при T проверить это через rails consoleLesson объект созданный успешно и с правильной последовательностью. Любые идеи почему?

ответ

0

lesson.sequence.should_not be_nil - это правильный способ проверить нуль, насколько я знаю. Вы пробовали это?

+0

это не сработало. –

0

Любые проверки, которые у вас есть на уроке, могут быть молча отменены при создании, прежде чем ваш вызов будет вызван. Измените его на create! в спецификации, чтобы проверить его.

+0

Я не проверял ошибки проверки. объект Lesson создается, но как-то атрибут последовательности не устанавливается. –

+0

Знаете ли вы, что вызов set_sequence вызывается? – regularfry

0

FactoryGirl сначала инициализирует объект без параметров, а затем присваивает параметры один за другим. Обратный вызов в вашей модели, вероятно, не будет работать в этом случае. Таким образом, вы можете попытаться изменить «поведение с добавлением

initialize_with { new(attributes) } 

к Lesson» FactoryGirl завод s. Я не уверен, что это поможет. Тестирование поведения обратного вызова в Rails является сложным.