问题标签 [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 回答
1453 浏览

rspec - 存根由包装器方法调用的“嵌套”类方法(RSpec Mocks)

情况:我想存根一个辅助方法,这样我就可以调用一个包装它的方法并取回存根的响应。

代码设置如下:

我试图模拟.method_three,以便我可以调用.method_one并让它最终调用.method_three'double 而不是真正的交易:

我得到的错误:

我正在尝试做的事情可能吗?感觉好像我错过了一个明显的步骤,但尽管我尽了最大的努力,我还是找不到这样的例子或提出任何类似问题的问题。

(注意:如果重要的话,这不是 Rails 项目。)

0 投票
1 回答
678 浏览

ruby-on-rails - 如何在不使用 rspec 将测试与被测代码耦合的情况下进行存根/模拟?

假设有一个工人,他的工作是:

  • 通过一组标准查找或创建记录;
  • 更新记录的属性。

这是一个示例实现:

我想测试一下:

  • 如果记录不存在,工人创建记录;
  • 工作人员不创建新记录,但如果记录存在,则获取现有记录;
  • 在任何情况下,工人都会更新记录

测试最后一个的一种方法是使用expect_any_instance_of

expect/allow_any_instance_of问题是不鼓励使用 of :

rspec-mocks API 是为单个对象实例设计的,但此功能适用于整个对象类。因此,存在一些语义上令人困惑的边缘情况。例如,在 expect_any_instance_of(Widget).to receive(:name).twice 中,不清楚每个特定实例是否预期会接收 name 两次,或者是否预期两个接收总数。(是前者。)

使用此功能通常是一种设计气味。可能是您的测试试图做的太多,或者被测对象太复杂。

它是 rspec-mocks 中最复杂的功能,历史上收到的错误报告最多。(核心团队都没有积极使用它,这无济于事。)

正确的方法是使用instance_double. 所以我会尝试:

这一切都很好,但是,如果我有这个实现怎么办:

现在,expect(MyRecord).to receive(:find_or_create_by).and_return(record), 将不起作用,因为实际上接收的对象find_or_create_byMyRecord::ActiveRecord_Relation.

所以现在我需要将调用存根includes

另外,假设我这样称呼我的服务:

现在,我将收到意外消息baz并由. 现在我需要这些消息或使用 Null 对象 doubledamrecordexpect/allow

所以在这一切之后,我最终得到了一个测试,它超级紧密地反映了正在测试的方法/类的实现。我为什么要关心,includes在获取记录时,一些额外的记录是通过 预先加载的?我为什么要关心,在调用之前update,我还调用了记录上的一些方法(bazdam)?

这是 rspec-mocks 框架的限制/框架的哲学还是我用错了?

0 投票
1 回答
650 浏览

rspec-rails - 动态生成的模拟对象 + rspec-mock

我正在使用 jruby(9.1.12.0) 和 rspec-rails(3.7.0)。

我有以下方法

并添加了相同的测试

我的规格未能说明

我们如何模拟以便我们收到相同的实例?

0 投票
1 回答
570 浏览

ruby - Rspec 中的间谍问题

无法弄清楚原因:

结果是:

“失败/错误:expect(arr.store).to have_received(:[]=).exactly(8).times # 预期已收到 []=,但该对象不是间谍或方法未被存根。 "

0 投票
1 回答
157 浏览

rspec - 当我使用 gem 'rspec-mock' 的 'stub_chain' 时收到弃用警告

我正在使用 RSpec 和 rspec-mocks 为一些对象进行模拟。我反对的是以下内容。

在规格文件中

在模拟文件中

但如果我使用stub_chain,则会出现以下弃用警告。

你有什么想法可以解决这个警告吗?该allow方法看起来没用,因为我想像Object.something_instead_of_stub_chain(:create).and_return(Mock.mock_create).

0 投票
1 回答
30 浏览

rspec-mocks - 是否可以期望使用不同的值调用两次 RSpec double?

在 RSpec 的模拟文档中,我发现
expect(double).to receive(:msg).exactly(3).times.and_return(value1, value2, value3)
# 第一次返回 value1,第二次返回 value2,等等`

如果我执行相同的with参数,例如。
expect(double).to receive(:msg).exactly(3).times.with(value1, value2, value3)
RSpec 自然期望msg被调用value1, value2, value33 次。
有没有办法called the first time with value1, the second time with value 2, etc

0 投票
2 回答
1468 浏览

ruby-on-rails - Rspec-mocks 不会引发异常

我有这段创建 gitlab 存储库的 RoR 代码。如果存储库已存在,则该方法返回 false 并显示错误消息。

```

我想测试这个方法,特别是当存储库已经存在时。我使用 rspec-mocks,这就是我所拥有的:

测试返回true。似乎没有触发异常。

知道发生了什么吗?

0 投票
2 回答
500 浏览

rspec - 如何在 rspec 中抑制警告“删除 `initialize' 可能会导致严重问题”?

我有一个测试:

allow_any_instance_of(GoogleMapsService::Client).to receive(:initialize)

我得到了warning: removing 'initialize' may cause serious problems,但我没有找到任何其他方法来解决这个问题。

如何以另一种方式解决它,以免收到警告或如何使警告静音?

非常感谢

0 投票
1 回答
554 浏览

ruby - How to spy just one call of ActiveSupport::Notifications #instrument, not all of them

I'm making a Rspec test that checks if ActiveSupport::Notification.instrument was called with some parameters.

The thing is that in order to make this test a need FactoryBot to build some objects, but when I try to spy on ActiveSupport::Notification.instrument I always get an error:

It seems that FactoryBot calls activesupport so when I mock it for my test purpose I end up mocking it too far...

code example:

class:

spec:

How can I just mock my call and not FactoryBot's .

I only manage that with one more allow before the one that mocks :asd:

Is there another(better) way?

0 投票
1 回答
106 浏览

ruby - 依赖注入导致 Rspec 失败和 IRB 失败

注意:我是 Ruby 和编程新手。我有一个名为的类,JourneyLog我正在尝试获取一个方法start来实例化另一个类的新实例,称为Journey

当我进入时,irb我遇到以下问题

我也有以下 Rspec 测试

我收到以下 Rspec 失败;

我完全不知道问题是什么,或者在哪里寻找一些答案。我假设我没有Journey正确地注入课程,但这就是我所能得到的。有人可以提供一些帮助吗?