问题标签 [stubbing]

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 回答
367 浏览

ruby-on-rails - 存根方法在 before_create 回调中返回 nil

我在我的模型中测试 before_create 回调处于死胡同。

我的规格

这是我的模型的代码

正在调用 before_filter 方法,但在该回调中,帐户方法的存根似乎不起作用。我测试过

果相同。这是怎么回事?

顺便说一句,我正在使用 rails 2.3 和 rspec-rails 1.3.4

0 投票
1 回答
637 浏览

ruby-on-rails - RSpec Stub 不涵盖多个嵌套的 Describe 块

我有一个结构如下的测试套件:

第一个测试有 DateTime(now) == base_time,但第二个测试为 DateTime(now) == 我的计算机的日期时间,表明存根不再有效。将stub!调用移动到每个describe循环中可以解决问题,但我想了解为什么它不能按书面方式工作。

0 投票
1 回答
134 浏览

ruby-on-rails - 评论属于_已删除的用户。如何关联“占位符”?

我的评论是由用户放置的。评论belongs_to :user和用户has_many :comments

但是可以删除用户。如果完成,我宁愿不删除他们的评论,而是将他们的评论与一个 Dummy 用户相关联。

我可以想到几种方法:

  • 在加载评论时,如果未找到相关用户,则在内存中创建一个带有虚拟数据的用户。
  • 在加载评论时,如果未找到相关用户,则从数据库中选择一个预定义的用户。
  • 删除评论时,将所有评论与数据库中的预定义用户相关联;通过一些后期过滤器。

我的感觉是第一是最干净的;因为其他两个需要数据库中的用户,该用户将在代码中硬连线。如果用户 18394 是那个“特殊”用户,我需要为那个特殊用户提供各种安全网。

0 投票
1 回答
711 浏览

cucumber - 模拟和存根可以在黄瓜步骤之间持续存在吗?

我有一个依赖于 3rd 方 API 的应用程序PSC,但我想将我的黄瓜测试与对 PSC 的 API 调用隔离开来。

所以,我写了几个黄瓜步骤:

...这些存根应该做的是让 Cucumber 场景认为 API 调用正在工作。但是,存根似乎不会在步骤之间持续存在,因此我的场景中的进一步步骤不会获得存根返回值,它们会尝试进行实际的 API 调用,因此它们会失败。

有没有办法让存根至少在整个场景中持续存在?我已经在其他 Cucumber 测试中成功使用了存根,所以我知道它们通常可以工作,但这是我第一次编写一个 Cucumber 步骤,其全部目的是提供一个存根。

0 投票
4 回答
15077 浏览

ruby-on-rails - 测试时我应该在 Factory girl 中还是在规范文件中存根模型?

几乎我遇到的每个规范文件最终都会编写如下内容:

我的意思是,我从 Factory.build 获得的模型是完全有效的。但是,如果我不存根那些东西,它会将东西保存在文件系统中,并验证我没有测试的东西......

我的意思是,我认为做这样的事情会更干净:

如果在工厂内存根甚至是可能的。

存根模型的正确方法是什么?

0 投票
2 回答
3416 浏览

ruby-on-rails - 对控制器测试进行 Stubbing Warden

我在测试控制器和使用 Warden 时遇到问题。

所有示例都指向 stubbing request.env['warden']。当我调用时,这会导致我的控制器出现问题env['warden'],然后返回nil

举个粗略的例子,使用这个:

还有一个简单的前置过滤器,如下所示:

我得到一个nil.

我只是设法让它使用controller.env['warden'] = ...它并且它有效。这是有道理的,因为它位于控制器级别,所以我想我的问题是在我看过的所有示例中它不起作用。

我有这个spec_helper

任何帮助都会很棒!

0 投票
1 回答
1410 浏览

c# - 如何使用 Rhino 使用 ref 参数对返回 void 的方法进行存根

如果它们返回 void,我找不到使用 ref 参数存根方法的方法,如下例所示:

你有什么主意吗?

谢谢, 斯泰尼奥

0 投票
3 回答
1147 浏览

ruby - 我应该使用什么策略来单元测试读取 ruby​​ (rspec) 中的文件?

我有一个 ruby​​ 方法,它逐行处理一个非常大的文件(即我无法将文件加载到内存中),如下所示:

根据最佳实践,我不希望这种方法对文件系统有任何依赖。我以前使用过存根,但我不确定我将如何在这里使用它。我想我会使用相当于:

我只是不确定 {something} 是什么。

我正在使用 rspect,任何帮助将不胜感激。谢谢。

0 投票
2 回答
1323 浏览

zend-framework - Zend Framework 应用程序中 PHPUnit 中的存根和模拟

我是 Zend 框架和 PHPUnit 的新手。我正在将遗留应用程序转换为 MVC 架构并尝试编写单元测试。我对单元测试概念有些熟悉,但一般都坚持使用 stubbing 和 mocking。例如考虑以下

在我试图测试的控制器操作中,我传入了一个成员 ID。然后我使用 ID 初始化一个成员对象。然后我调用一些与成员对象关联的方法并将返回值分配给视图对象。

如何在我的测试中模拟 $member 变量,以便我可以自定义方法返回值?

如果我在这里的理解不正确,我将不胜感激一些指导。

谢谢!

0 投票
1 回答
1174 浏览

ruby-on-rails - 你如何存根 ActiveRecord::Base 方法而不假设它是如何使用的?

ActiveRecord::Base有一个很大的 API,有多种查找和保存对象的方法。例如,您的AR::B对象可能已从多个方法实例化:

  • Foo.new(…)
  • Foo.create(…)
  • Foo.find(…)
  • Foo.find_by_sql(…)
  • Foo.find_[all_]by_*(…)
  • bar.foos(协会)
    • ……当然还有关于关联的查找器方法

同样,有问题的对象可能会通过几种不同的方法持久化:

  • foo.create或者foo.create!
  • foo.save或者foo.save!
  • foo.update_attributes或者foo.update_attributes!

现在,在编写单元测试时,最好将外部方法调用存根,这样您的测试就可以专注于相关方法的业务逻辑。然而,当涉及到使用AR::B对象时——例如在控制器单元测试中——似乎你必须提交上述方法之一,而实际上就方法的业务逻辑而言,它不应该是重要的您选择的。

您是否必须将您的方法的行为与其实现紧密结合起来,还是我错过了一些简单的东西?