提交 cf616e48 编写于 作者: M Mislav Marohnić 提交者: Jeremy Kemper

merge callbacks_observers_test.rb into lifecycle_test.rb where other observers test reside

Benefits: test able to run independently, subclassing instead of changing the original Comment model
Signed-off-by: NJeremy Kemper <jeremy@bitsweat.net>
上级 779723a0
require "cases/helper"
class Comment < ActiveRecord::Base
attr_accessor :callers
before_validation :record_callers
after_validation do
record_callers
end
def record_callers
callers << self.class if callers
end
end
class CommentObserver < ActiveRecord::Observer
attr_accessor :callers
def after_validation(model)
callers << self.class if callers
end
end
class CallbacksObserversTest < ActiveRecord::TestCase
def test_model_callbacks_fire_before_observers_are_notified
callers = []
comment = Comment.new
comment.callers = callers
CommentObserver.instance.callers = callers
comment.valid?
assert_equal [Comment, Comment, CommentObserver], callers, "model callbacks did not fire before observers were notified"
end
end
......@@ -3,6 +3,7 @@
require 'models/developer'
require 'models/reply'
require 'models/minimalistic'
require 'models/comment'
class SpecialDeveloper < Developer; end
......@@ -57,6 +58,28 @@ def after_find(record)
end
end
class ValidatedComment < Comment
attr_accessor :callers
before_validation :record_callers
after_validation do
record_callers
end
def record_callers
callers << self.class if callers
end
end
class ValidatedCommentObserver < ActiveRecord::Observer
attr_accessor :callers
def after_validation(model)
callers << self.class if callers
end
end
class LifecycleTest < ActiveRecord::TestCase
fixtures :topics, :developers, :minimalistics
......@@ -125,4 +148,15 @@ def test_after_find_can_be_observed_when_its_defined_on_the_model
def test_invalid_observer
assert_raise(ArgumentError) { Topic.observers = Object.new; Topic.instantiate_observers }
end
test "model callbacks fire before observers are notified" do
callers = []
comment = ValidatedComment.new
comment.callers = ValidatedCommentObserver.instance.callers = callers
comment.valid?
assert_equal [ValidatedComment, ValidatedComment, ValidatedCommentObserver], callers,
"model callbacks did not fire before observers were notified"
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册