У меня есть лента новостей на основе redis, в которую вставляются элементы с помощью обратных вызовов, когда происходят определенные события. Например, когда пользователь делает заметку о книге, она вставляется в новостные ленты читателей книги.
class Note < ActiveRecord::Base
after_save do |note|
notify_the note.book.readers
end
...
end
Теперь это нормально, и я на 99% уверен, что это работает, так как я могу посмотреть свою ленту и увидеть там заметки. Моя проблема заключается в тестировании на Rails 3 с последней версией rspec-rails.
По какой-то причине это проходит:
spec/models/note_spec.rb
describe "note creation" do
it "should notify the readers of the book the note is on" do
@user.feed.count.should == 0
@note.save!
@user.feed.count.should == 1
end
end
Но это не так:
spec/models/note_spec.rb
describe "note creation" do
it "should notify the readers of the book the note is on" do
lambda do
@note.save!
end.should change(@user.feed, :count).by(1)
end
end
а я не могу понять в чем разница?
@note.save!
генерирует исключение, и оно не всплывает, потому что оно изолировано в лямбде. Но если@note
во втором тесте будет точно таким же, как и в первом тесте, это маловероятно. - person Robert Speicher   schedule 15.04.2011