gpt4 book ai didi

ruby-on-rails - 如何获取查询以返回我的模拟对象?

转载 作者:行者123 更新时间:2023-12-03 10:07:05 26 4
gpt4 key购买 nike

如果在我的RSpec测试中

foo = mock_model(Foo, id: 1)

和我的代码运行
Foo.where(id: 1)

我的代码将始终失败,因为 mock_model foo永远不会属于Foo集合,例如
Foo.count # => 0

如果我运行 foo.instance_of?(Foo),我会得到 true,因此行为正确。我想念什么?我想依靠真实的模拟,而不必依靠FactoryGirl或实例化Foo本身的对象。

最佳答案

首先,在不使用FactoryGirl的情况下做得很好。随着您减少测试命中数据库的次数,您的测试将变得更快。但是这种方法将需要坚持不懈。

现在,一旦使用了模拟模型,您将需要对模拟中调用的所有方法进行 stub 。

这意味着您将无法调用Foo.where(id:1),因为这是一个不包含新创建的foo的模型对象。记住foo是一个模拟对象,不会写入数据库。

因此,您遇到的“异常”不是异常。它告诉您,模拟对象foo的格式为Foo,当然可以。但是您的模拟并未保存到数据库中。因此Foo.count返回0。

要完成测试,您需要通过说几句来结束您的断言
allow(Foo).to receive(where).with(id: 1).and_return(foo)
我希望这有帮助

关于ruby-on-rails - 如何获取查询以返回我的模拟对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38851387/

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