gpt4 book ai didi

ruby-on-rails - 您将如何在 Ruby on Rails 应用程序中使用 rSpec 测试观察者?

转载 作者:数据小太阳 更新时间:2023-10-29 06:23:42 24 4
gpt4 key购买 nike

假设您的一个 Ruby on Rails 应用程序中有一个 ActiveRecord::Observer - 您如何使用 rSpec 测试这个观察器?

最佳答案

您走在正确的 rails 上,但我在使用 rSpec、观察者和模拟对象时遇到了许多令人沮丧的意外消息错误。当我对我的模型进行规范测试时,我不想在我的消息期望中处理观察者行为。

在您的示例中,在不知道观察者将要对其执行的操作的情况下,没有一种真正好的方法可以在模型上指定“set_status”。

因此,我喜欢使用 "No Peeping Toms" plugin.根据上面的代码并使用 No Peeping Toms 插件,我会像这样指定模型:

describe Person do 
it "should set status correctly" do
@p = Person.new(:status => "foo")
@p.set_status("bar")
@p.save
@p.status.should eql("bar")
end
end

您可以指定您的模型代码,而不必担心会有观察者进来破坏您的值(value)。您可以像这样在 person_observer_spec 中单独指定:

describe PersonObserver do
it "should clobber the status field" do
@p = mock_model(Person, :status => "foo")
@obs = PersonObserver.instance
@p.should_receive(:set_status).with("aha!")
@obs.after_save
end
end

如果你真的真的想测试耦合的 Model 和 Observer 类,你可以这样做:

describe Person do 
it "should register a status change with the person observer turned on" do
Person.with_observers(:person_observer) do
lambda { @p = Person.new; @p.save }.should change(@p, :status).to("aha!)
end
end
end

99% 的时间,我宁愿在观察者关闭的情况下进行规范测试。那样更容​​易。

关于ruby-on-rails - 您将如何在 Ruby on Rails 应用程序中使用 rSpec 测试观察者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33048/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com