问题标签 [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.
ruby - 如何避免使用allow_any_instance_of?
假设我们有以下代码:
为了测试这些方法,我曾经使用过allow_any_instance_of
:
但是由于几个原因,文档建议我们不要使用它。那么如何避免allow_any_instance_of
呢?我只找到了一种解决方案:
但是使用这种方法,代码很快就会充满几乎无用的方法(尤其是当您在所描述的类中积极使用不同对象的组合时)。
ruby - expect(Class).to receive(:x).with(hash_including(y: :z)) 不起作用
我想检查Pandoc.convert
是用这样的选项调用的to: :docx
:
我在规范中有以下期望:
规范失败如下:
但是调试的时候options
是这样的:
我想我使用了错误的 RSpec 匹配器(或以错误的方式使用正确的匹配器),但我无法让它工作。
ruby-on-rails - 如何使用 rspec-mock 存根第三方对象?
我有点新rspec-mock
,现在我正在集成hominid以与 Mailchimp 通信,我想存根一些方法调用,所以我的请求实际上并没有发送到 Mailchimp。这就是我正在做的
配置/初始化程序/mailchimp.rb
用户.rb
如您所见,对于创建的每个用户,list_subscribe
都会调用a MAILCHIMP
,现在我不希望list_subscribe
在每个测试中都被实际调用,因为User
到处都在使用,所以我在全局范围内配置了一个像这样的存根:
规范/spec_helper.rb
我预计MAILCHIMP
instance 不会调用list_subscribe
而只是 return true
,因为如果list_subscribe
被调用,一些意外请求将转到 Mailchimp,我想防止这种情况发生。但是我上面的代码不起作用,我错了什么?如何解决这个问题?
此外,答案可能与我的情况类似How should I stub a method global using RSpec?
我感谢任何帮助和建议?谢谢!
ruby-on-rails - 如何使用 RSpec 模拟消息链?
我有一个声明,就像Model.some_scope.pluck(:a_field)
我想测试的方法一样。
我用 rspec-mocks 3.4.0 存根这个链式方法调用语句的返回值的推荐方法是什么?我看到了,stub_chain
并且receive_message_chain
在 RSpec 网站上都被列为旧语法。
此致。
ruby-on-rails - 为 rake 任务编写 rspec
我有这样的任务/lib/crawler.rake
:
这里的逻辑,如果并行后一切正常,我们将调用update_by_grounds_and_time
方法更新Availability
;如果出现错误,我们将停止操作并引发错误。
所以我想编写 rspec 来测试这些情况,我想在这里模拟/存根任务的输出(通过或引发错误)并检查我们是否调用了update_by_grounds_and_time
方法?我们可以不需要调用真正的任务吗?我们可以使用Rspec Mock
吗?
你能帮助我吗!感谢
ruby - RSpec 间谍在两个不同的类上的工作方式不同
我有一个类Uploader
,它需要一个文件并将其上传到 S3。我正在尝试测试在被调用@s3
时实际上是在接收文件正文。upload_file
当我测试File
正在发送消息时,测试通过了。然而,试图窥探Aws::S3::Client
是行不通的。
ruby-on-rails - expect 和 expect_any_instance_of 之间的区别
我的控制器中有如下所示的方法:
我为该方法编写了以下规范:
但问题是这个规范没有通过。这条线失败了:
当我将其更改为
一切都很好。有人可以解释一下为什么带有期望语法的规范没有通过吗?
编辑:
这是错误的样子:
ruby-on-rails - 在 RSpec 中测试创建操作时未获得准确的输出
我正在使用模拟和存根进行测试,但create
在控制器中测试操作时无法获得所需的输出。
失败的测试:
create
控制器中的动作
错误:
rails-activerecord - 如何完全避免在 RSpec 测试中使用数据库?
我想使用 FactoryGirl 来构建模型的内存存根,然后让所有 ActiveRecord 查询仅针对这些查询运行。例如:
解决方案可能是使用内存数据库。但上述情况可能吗?
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
?