我有一个基于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
我无法弄清楚区别是什么?
答案 0 :(得分:2)
RSpec不支持此匹配器的do / end语法。请参阅本页底部的警告...... http://apidock.com/rspec/Spec/Matchers/change
答案 1 :(得分:0)
为了使用lambda并测试更改,你需要使用大括号{} - 不支持do / end语法。