Использование лямбда для проверки обратных вызовов в рельсах? - PullRequest
1 голос
/ 15 апреля 2011

У меня есть новостная лента на основе 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

и я не могу понять, в чем разница?

Ответы [ 2 ]

2 голосов
/ 16 апреля 2011

RSpec не поддерживает синтаксис do / end для этого сопоставителя. Смотрите предупреждение внизу этой страницы ... http://apidock.com/rspec/Spec/Matchers/change

0 голосов
/ 16 апреля 2011

Чтобы использовать лямбду и проверить изменения, вам нужно использовать фигурные скобки {} - синтаксис do / end не поддерживается (пока).

...