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

标签 ruby-on-rails unit-testing rspec mocking stubbing

如果在我的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/

相关文章:

ruby-on-rails - 如何在 Redmine 的问题表报告中添加另一列?

unit-testing - 在特定项目上进行单元测试时,有没有办法在 Delphi 中关闭异常通知

ruby - 有哪些很好地使用 Cucumber 和 RSpec 的开源 Ruby 项目示例?

ruby-on-rails - 与技术无关的 JSON API 集成测试框架

ruby-on-rails - 子类上的急切加载关联

ruby-on-rails - 是否保存图像在回形针中的尺寸(宽度和高度)?

ruby-on-rails - 在 Ruby/Rails 中,什么是 "Rails"?

unit-testing - 单元测试/TDD 的有用设计模式?

c# - SqlConnection 命令在删除时不会引发异常

rspec at_least once using with condition 没有像我预期的那样工作