问题标签 [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.
rspec - 存根由包装器方法调用的“嵌套”类方法(RSpec Mocks)
情况:我想存根一个辅助方法,这样我就可以调用一个包装它的方法并取回存根的响应。
代码设置如下:
我试图模拟.method_three
,以便我可以调用.method_one
并让它最终调用.method_three
'double 而不是真正的交易:
我得到的错误:
我正在尝试做的事情可能吗?感觉好像我错过了一个明显的步骤,但尽管我尽了最大的努力,我还是找不到这样的例子或提出任何类似问题的问题。
(注意:如果重要的话,这不是 Rails 项目。)
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_by
是
MyRecord::ActiveRecord_Relation
.
所以现在我需要将调用存根includes
:
另外,假设我这样称呼我的服务:
现在,我将收到意外消息baz
并由. 现在我需要这些消息或使用
Null 对象 double。dam
record
expect/allow
所以在这一切之后,我最终得到了一个测试,它超级紧密地反映了正在测试的方法/类的实现。我为什么要关心,includes
在获取记录时,一些额外的记录是通过 预先加载的?我为什么要关心,在调用之前update
,我还调用了记录上的一些方法(baz
,dam
)?
这是 rspec-mocks 框架的限制/框架的哲学还是我用错了?
rspec-rails - 动态生成的模拟对象 + rspec-mock
我正在使用 jruby(9.1.12.0) 和 rspec-rails(3.7.0)。
我有以下方法
并添加了相同的测试
我的规格未能说明
我们如何模拟以便我们收到相同的实例?
ruby - Rspec 中的间谍问题
无法弄清楚原因:
结果是:
“失败/错误:expect(arr.store).to have_received(:[]=).exactly(8).times # 预期已收到 []=,但该对象不是间谍或方法未被存根。 "
rspec - 当我使用 gem 'rspec-mock' 的 'stub_chain' 时收到弃用警告
我正在使用 RSpec 和 rspec-mocks 为一些对象进行模拟。我反对的是以下内容。
在规格文件中
在模拟文件中
但如果我使用stub_chain
,则会出现以下弃用警告。
你有什么想法可以解决这个警告吗?该allow
方法看起来没用,因为我想像Object.something_instead_of_stub_chain(:create).and_return(Mock.mock_create)
.
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, value3
3 次。
有没有办法called the first time with value1, the second time with value 2, etc
说
ruby-on-rails - Rspec-mocks 不会引发异常
我有这段创建 gitlab 存储库的 RoR 代码。如果存储库已存在,则该方法返回 false 并显示错误消息。
```
我想测试这个方法,特别是当存储库已经存在时。我使用 rspec-mocks,这就是我所拥有的:
测试返回true。似乎没有触发异常。
知道发生了什么吗?
rspec - 如何在 rspec 中抑制警告“删除 `initialize' 可能会导致严重问题”?
我有一个测试:
allow_any_instance_of(GoogleMapsService::Client).to receive(:initialize)
我得到了warning: removing 'initialize' may cause serious problems
,但我没有找到任何其他方法来解决这个问题。
如何以另一种方式解决它,以免收到警告或如何使警告静音?
非常感谢
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?
ruby - 依赖注入导致 Rspec 失败和 IRB 失败
注意:我是 Ruby 和编程新手。我有一个名为的类,JourneyLog
我正在尝试获取一个方法start
来实例化另一个类的新实例,称为Journey
当我进入时,irb
我遇到以下问题
我也有以下 Rspec 测试
我收到以下 Rspec 失败;
我完全不知道问题是什么,或者在哪里寻找一些答案。我假设我没有Journey
正确地注入课程,但这就是我所能得到的。有人可以提供一些帮助吗?