问题标签 [rspec-mocks]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
10364 浏览

ruby - 如何使用 rspec/rspec-mocks 存根类方法

我正在使用 rspec-mock 进行测试驱动开发。我开始实现一个类并使用 rspec-mock 模拟/存根其他类。尚未实现的类的模拟对象效果很好。但是,当我尝试模拟一个尚不存在的类的类方法时,我并没有成功。我的类“Hashes”应该有一个类方法“calculate_hashes”接收文件名并返回一个哈希值。

我试过

这给出了错误“哈希不是一个类”。然后我实现了一个类“哈希”

然后只尝试以相同的方式存根类方法。当我将该方法添加到我的类定义中时,这会给出错误“哈希未实现:calculate_hash”:

它终于起作用了,我对此类方法的存根使用“allow(Hashes)”起作用,如上面的示例所示。我只是想知道是否有一种方法可以在不编写此类骨架的情况下完成此操作。

还是我可能试图以不恰当的方式完成某事?还是 rspec-mock 可能不是执行此操作的正确工具?

任何帮助是极大的赞赏。

0 投票
1 回答
530 浏览

ruby-on-rails-4 - RSpec::Mocks::Mock:Class 的未定义方法“i18n_scope”

我最近升级到 Rails 4。当我运行 RSpec 测试时出现错误。

这是我的规格:

<NoMethodError: undefined method 'i18n_scope' for RSpec::Mocks::Mock:Class>在第 3 行得到了错误。

根据 API 文档,“i18n_scope”已从 Rails 4 中删除。

0 投票
2 回答
3601 浏览

ruby-on-rails - 如何使用 rspec mocks 3.3 测试方法的救援块

帮助我通过这个测试:

这是一些 rspec 代码的示例,

我还创建了一个包含这些测试的小提琴,所以你可以让它们通过。请帮我测试一个方法的救援块!


背景:

我原来的问题是这样的:

我有一个方法,如下所示:

我想测试一下resource.errors.add(:base, e.errors),实际上是在资源中添加了一个错误。更一般地说,我想在一个方法中测试救援块。

所以我想写这样的代码,

当然,这会引发错误,因为我在救援区块中重新加注。

我见过一些使用 old 的答案something.stub(:method_name).and_raise(SomeException),但 rspec 抱怨这种语法已被弃用。我想使用Rspec Mocks 3.3allow语法,但我很难过。

0 投票
1 回答
226 浏览

ruby-on-rails - Cucumber 中的 Rspec Mocks 继续执行原始方法

我得到了一个黄瓜步骤,定义如下:

在我的控制器中,我有一个代理原始库类的小类:

在执行测试时,“MyConnection.retrieve_connection”会尝试连接到 Web 服务,即使它已被删除。但是,如果在测试中我写

所以MyConnection.retrieve_connection返回虚拟连接,这是正确的。它只是在控制器中不起作用。

我没有想法,它似乎根本不起作用。有什么提示吗?

0 投票
2 回答
9144 浏览

ruby-on-rails - Rspec - 结合 expect_any_instance_of 和接收计数

我需要验证我的类的任何实例是否接收到某个方法,但我不在乎是否有很多实例接收它(它们应该接收)。

我试过这样:

但显然,它只允许单个实例多次接收该方法,但不允许不同的实例。

有没有办法做到这一点?

0 投票
1 回答
1409 浏览

ruby-on-rails - 如何测试一个类是否在 RSpec 中收到消息?

我有一个类似的服务对象:

我有以下相关规范:

我想确保在我打电话时EquityContract收到一条消息。find_by#call

在我运行规范时,我得到:

我该如何测试这种行为?

0 投票
1 回答
686 浏览

ruby-on-rails - 如何在控制器的搜索方法中存根 Searchkick

我是 RSpec 的新手。我想测试我的搜索控制器。我尝试在控制器中存根我的搜索方法,但它总是失败。

隔离 Searchkick 的正确方法是什么?

这是我在控制器中的搜索方法:

这是我的控制器测试:

感谢您宝贵的时间!

0 投票
1 回答
1158 浏览

ruby - 在 RSpec 中,如何模拟使用常量参数调用的方法?

我正在创建一个 gem,它在它正在使用的任何应用程序中都有一个常量(在运行生成器之后),但该常量在 gem 本身中不存在。我在 gem 中遇到 RSpec 问题,没有跳过调用常量的代码部分。下面是一个简单的例子。

foo_spec.rb

rspec 输出

我想编写测试,以便它完全跳过Bar.send调用,这样它就永远不知道它里面有一个坏常量。真的没有很好的方法来解决这个问题。

0 投票
2 回答
958 浏览

ruby - 如何使 rspec-mocks 期望收到。with 急切地失败

如果使用与传递给的 arg 匹配器不匹配的参数调用目标,则rspec-mocksexpect(target).to receive(:message).with(arg_matcher)只会在测试结束时显示错误with。有没有办法强迫它急切地失败 - 即,一旦使用不匹配的参数调用目标?RR 以这种方式工作。

我面临的问题是,当我如上所述使用 arg_matcher 设置此模拟时,测试开始失败,因为使用不同的参数调用目标,但是在测试结束之前另一个断言失败,所以我只看到错误来自这个断言,而不是来自丢失的模拟(这将向我展示预期参数和实际调用的参数之间的差异)。

使用 rspec-mocks 3.3.2。

0 投票
2 回答
82 浏览

ruby-on-rails - 使用 mock 和 stubb 重构代码

我是 Rails 的新手,我现在正在尝试使用 stubbs 和 mocks 测试我的控制器代码。我尝试在代码上使用模拟,但我不能正确地做到这一点。请帮助我解决重构的正确代码。请帮助我解释您编写的代码。

d