使用lambda测试rails中的回调?

时间:2011-04-15 15:56:01

标签: ruby-on-rails ruby-on-rails-3 rspec redis rspec2

我有一个基于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 个答案:

答案 0 :(得分:2)

RSpec不支持此匹配器的do / end语法。请参阅本页底部的警告...... http://apidock.com/rspec/Spec/Matchers/change

答案 1 :(得分:0)

为了使用lambda并测试更改,你需要使用大括号{} - 不支持do / end语法。