问题标签 [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 投票
2 回答
6600 浏览

ruby - 如何避免使用allow_any_instance_of?

假设我们有以下代码:

为了测试这些方法,我曾经使用过allow_any_instance_of

但是由于几个原因,文档建议我们不要使用它。那么如何避免allow_any_instance_of呢?我只找到了一种解决方案:

但是使用这种方法,代码很快就会充满几乎无用的方法(尤其是当您在所描述的类中积极使用不同对象的组合时)。

0 投票
1 回答
622 浏览

ruby - expect(Class).to receive(:x).with(hash_including(y: :z)) 不起作用

我想检查Pandoc.convert是用这样的选项调用的to: :docx

我在规范中有以下期望:

规范失败如下:

但是调试的时候options是这样的:

我想我使用了错误的 RSpec 匹配器(或以错误的方式使用正确的匹配器),但我无法让它工作。

0 投票
1 回答
977 浏览

ruby-on-rails - 如何使用 rspec-mock 存根第三方对象?

我有点新rspec-mock,现在我正在集成hominid以与 Mailchimp 通信,我想存根一些方法调用,所以我的请求实际上并没有发送到 Mailchimp。这就是我正在做的

配置/初始化程序/mailchimp.rb

用户.rb

如您所见,对于创建的每个用户,list_subscribe都会调用a MAILCHIMP,现在我不希望list_subscribe在每个测试中都被实际调用,因为User到处都在使用,所以我在全局范围内配置了一个像这样的存根:

规范/spec_helper.rb

我预计MAILCHIMPinstance 不会调用list_subscribe而只是 return true,因为如果list_subscribe被调用,一些意外请求将转到 Mailchimp,我想防止这种情况发生。但是我上面的代码不起作用,我错了什么?如何解决这个问题?

此外,答案可能与我的情况类似How should I stub a method global using RSpec?

我感谢任何帮助和建议?谢谢!

0 投票
1 回答
1968 浏览

ruby-on-rails - 如何使用 RSpec 模拟消息链?

我有一个声明,就像Model.some_scope.pluck(:a_field)我想测试的方法一样。

我用 rspec-mocks 3.4.0 存根这个链式方法调用语句的返回值的推荐方法是什么?我看到了,stub_chain并且receive_message_chain在 RSpec 网站上都被列为旧语法。

此致。

0 投票
2 回答
2596 浏览

ruby-on-rails - 为 rake 任务编写 rspec

我有这样的任务/lib/crawler.rake

这里的逻辑,如果并行后一切正常,我们将调用update_by_grounds_and_time方法更新Availability;如果出现错误,我们将停止操作并引发错误。

所以我想编写 rspec 来测试这些情况,我想在这里模拟/存根任务的输出(通过或引发错误)并检查我们是否调用了update_by_grounds_and_time方法?我们可以不需要调用真正的任务吗?我们可以使用Rspec Mock吗?

你能帮助我吗!感谢

0 投票
1 回答
157 浏览

ruby - RSpec 间谍在两个不同的类上的工作方式不同

我有一个类Uploader,它需要一个文件并将其上传到 S3。我正在尝试测试在被调用@s3时实际上是在接收文件正文。upload_file当我测试File正在发送消息时,测试通过了。然而,试图窥探Aws::S3::Client是行不通的。

0 投票
1 回答
545 浏览

ruby-on-rails - expect 和 expect_any_instance_of 之间的区别

我的控制器中有如下所示的方法:

我为该方法编写了以下规范:

但问题是这个规范没有通过。这条线失败了:

当我将其更改为

一切都很好。有人可以解释一下为什么带有期望语法的规范没有通过吗?

编辑:

这是错误的样子:

0 投票
2 回答
344 浏览

ruby-on-rails - 在 RSpec 中测试创建操作时未获得准确的输出

我正在使用模拟和存根进行测试,但create在控制器中测试操作时无法获得所需的输出。

失败的测试:

create控制器中的动作

错误:

0 投票
1 回答
860 浏览

rails-activerecord - 如何完全避免在 RSpec 测试中使用数据库?

我想使用 FactoryGirl 来构建模型的内存存根,然后让所有 ActiveRecord 查询仅针对这些查询运行。例如:

解决方案可能是使用内存数据库。但上述情况可能吗?

0 投票
2 回答
2223 浏览

ruby-on-rails - RSpec - How to properly use doubles and stub methods on helper objects?

An action of a Rails controller makes an instance of a helper class (say SomeService), which performs some work and returns a results, something along the lines of:

I want to stub what SomeService#process returns.

My question is - how do I do this?

The following works:

However, the rspec-mock documentation discourages the use of allow_any_instance_of for the reasons states here:

The rspec-mocks API is designed for individual object instances, but this feature operates on entire classes of objects. As a result there are some semantically confusing edge cases. For example in expect_any_instance_of(Widget).to receive(:name).twice it isn't clear whether each specific instance is expected to receive name twice, or if two receives total are expected. (It's the former.)

Using this feature is often a design smell. It may be that your test is trying to do too much or that the object under test is too complex.

It is the most complicated feature of rspec-mocks, and has historically received the most bug reports. (None of the core team actively use it, which doesn't help.)

I think the idea is to do something like this:

However, how do I make the controller use the double and not make a new instance of SomeService?