gpt4 book ai didi

ruby - 如何 stub DataMapper 与 RSpec2 的关联?

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

我正在尝试编写一些规范并希望将对数据库的调用 stub ,这样我就不会依赖实际填充的数据库来运行测试。

现在我真的不知道如何使用 DataMapper 对关联之间的调用进行 stub 。

这里有两个示例模型:

class Foo
include DataMapper::Resource

property :id, Serial

has n, :bars
end

class Bar
include DataMapper::Resource

property :id, Serial

belongs_to :foo
end

现在我想 stub 调用 Foo.first('foobar')Foo.first('foobar').bars第一个使用 Foo.stub(:first) { #etc } 没有问题,但我不知道如何 stub 对其关联的第二次调用。Foo.stub(:bars) { #etc } 之类的东西不起作用。

有人知道怎么做吗?这种方法是否正确?

提前致谢。

最佳答案

我会使用模拟模型。

foo = mock(Foo).as_null_object
foo.stub(:bars)
Foo.stub(:first).and_return(foo)

使用 as_null_object 的原因是 RSpec 在被问及它是否响应未被告知期望的方法时默认返回 false。

如果这不起作用,则创建一个 foo 实例。

foo = Foo.create(:example => "data") #Or create with a factory a factory
foo.stub(:bars)
Foo.stub(:first).and_return(foo)

然后当你这样做时:

Foo.first('foobar').bars

它将使用第 2 行的 stub ,因为第一次调用将返回 foo 的实例。

关于ruby - 如何 stub DataMapper 与 RSpec2 的关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7091502/

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