gpt4 book ai didi

ruby-on-rails - 在 Ruby on Rails 应用程序中使用 RSpec 时, stub Mock 对象的 #class 方法是否合法?

转载 作者:行者123 更新时间:2023-12-04 07:08:17 25 4
gpt4 key购买 nike

我想 stub 模拟对象的 #class 方法:

describe Letter do
before(:each) do
@john = mock("John")
@john.stub!(:id).and_return(5)
@john.stub!(:class).and_return(Person) # is this ok?
@john.stub!(:name).and_return("John F.")
Person.stub!(:find).and_return(@john)
end
it.should "have a valid #to field" do
letter = Letter.create!(:to=>@john, :content => "Hello John")
letter.to_type.should == @john.class.name
letter.to_id.should == @john.id
end
[...]
end

在这个程序的第 5 行,我 stub 了 #class 方法,以允许诸如 @john.class.name 之类的东西。这是正确的方法吗?会不会有什么不好的副作用?

编辑:

Letter 类如下所示:
class Letter < ActiveRecord::Base
belongs_to :to, :polymorphic => true
[...]
end

我想知道 ActiveRecord 是否使用 to.class.name 获取 :to 字段的类名或通过其他方式。也许这就是 ActiveRecord::Base 的 class_name 方法的用途?

最佳答案

我认为你应该使用 mock_model对于这种特殊情况。
您的 before(:each)看起来像这样:

before(:each) do
@john = mock_model(Person, :name => "John F.")
Person.stub!(:find).and_return(@john)
end

然后对于您的另一个问题,您不应该真正关心 Rails 如何测试您的行为。我认为自己测试 to_type 和 to_id 字段不是一个好主意。这是 Rails 的行为,因此应该在 Rails 中进行测试,而不是在您的项目中。

我一直在用 Remarkable一段时间后,它可以很容易地指定:
describe Letter
should_belong_to :to, :polymorphic => true
end

关于ruby-on-rails - 在 Ruby on Rails 应用程序中使用 RSpec 时, stub Mock 对象的 #class 方法是否合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/765437/

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