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

ruby - 是否可以存根 nokogiri xml 搜索方法?

假设我有一个看起来像这样的方法:

是否可以创建一个 xml_resp_mock 并将链式调用存根.at('StatusCode').text——以返回“成功”?如果可能的话,我不确定要使用的语法。

0 投票
2 回答
89 浏览

ruby-on-rails-3 - 从模型中分离控制器测试

在编写底层模型类之前编写控制器测试和类是否可能(并且合理)?我以为我看到了有关如何做到这一点的说明,但现在我找不到食谱了。

例如,考虑以下控制器:

我可以在创建基础前提模型和前提之前测试此控制器代码吗?我知道以下内容行不通——你将如何重写它(如果可能的话)?

更新

我想得越多,我就越确信我确实需要定义这个Premise类——PremisesController代码需要引用它。所以我将把我的问题改为“是否有必要创建底层premises数据库表才能运行PremisesController测试?”

在这一点上,我没有看到解决它的好方法(不更改PremisesController代码,这会破坏测试点)。例如,调用respond_with调用@premise.has_errors?依次访问数据库以获取列名。除非我愿意对内部方法存根ActiveRecord,否则我看不到如何避免对数据库的影响。

但我很乐意以其他方式展示。

0 投票
2 回答
3350 浏览

ruby-on-rails - 你如何存根特定模拟实例的所有方法

我有一个由第三方处理的特定模拟。我只想检查是否已返回相同的模拟。

但是,第三方调用了我的测试并不真正关心的数组方法和保存方法。有没有办法告诉我的模拟它期望/存根所有方法都与那个特定的模拟实例有关?

例如。

谢谢!

编辑

有关该问题的更多信息:

测试:

正在测试的代码:

我需要模拟以下与我正在测试的内容没有直接关系的内容:

0 投票
1 回答
6646 浏览

ruby-on-rails - 在 RSpec / Rails 中存根类方法时遇到问题(并在存根上使用动态返回)

晚上好,

我试图在我的“模拟”类中测试一个相当长的方法,它调用类方法“is_male_alive?” 和“is_female_alive?” 在我的“年龄”课上几百次。这些类方法的返回值基于统计信息,我想将它们存根以返回特定值,以便我的测试每次运行都相同。

年龄.rb:

(女性版基本相同,只是一些不同的常数)

在我的“模拟”课程中,我执行以下操作:

在模拟的每次迭代中 - 本质上它只是传递一个年龄(例如 is_male_alive?(56) )并返回真或假。

我想删除这两种方法,以便:

  1. is_male_alive 吗?对于小于 75 的任何参数返回 true,否则返回 false
  2. is_female_alive?对于小于 80 的任何参数返回 true,否则返回 false

我尝试了以下方法,看看我是否有能力将它存根 (simulation_spec.rb):

但我收到以下错误:

我也不知道如何设置它,以便根据参数动态生成存根返回值。有没有办法用proc来做到这一点?

有没有办法模拟整个 Age 类(而不是仅仅模拟 Age 类的单个实例?)

谢谢你的帮助!!

更新 1

看起来这个方法被调用存在问题......这真的很令人困惑。为了真正查看它是否被调用,我在方法中抛出了“raise ArgumentError”。

开发环境(控制台):

所以它显然是在开发环境中调用这个方法,因为它抛出了参数错误。

在我的测试中再次运行它,它仍然说该方法没有被调用......我在下面使用你的代码:

我也试过这个

有什么想法吗?

0 投票
6 回答
50286 浏览

logging - RSpec:如何测试 Rails 记录器的消息期望?

我正在尝试测试 Rails 记录器是否接收到我的某些规范中的消息。我正在使用Logging gem

假设我有这样的课程:

和一个像这样的规范:

我收到以下失败消息:

我尝试了几种不同的方法来让规范通过。这适用于例如:

但是必须设置一个这样的可访问实例变量似乎在这里摇尾巴。(实际上,我什至不确定为什么将 logger 复制到 @log 会使其通过。)

什么是测试日志记录的好解决方案?

0 投票
2 回答
1009 浏览

ruby - should_receive 会做我没想到的事情吗?

考虑以下两个简单模型:

以及以下 Rspec 测试:

当我运行这个测试(或者,更确切地说,一个类似的测试)时,存根似乎没有工作:

正如您可能猜到的那样,失败出现在上面标有“此处错误”的行上。当该should_receive行被注释掉时,这个错误就消失了。这是怎么回事?

0 投票
3 回答
8029 浏览

ruby - 当一个对象的构造函数构建另一个对象时存根

所以我有一些代码,大大简化,看起来像这样:

换句话说,当我用选项初始化 A 时,它会创建一个 B 并将一组修改后的选项传递给它。

我想测试 B.new 是否获得了正确的论点。现在,我正在这样做,使用 RSpec/RR:

但这有两个问题。

首先,我无法B使用实际选项实例化实际副本。如果我在块内调用 B.new,它会调用存根版本并循环直到堆栈弹出。我可以@b = B.new在 stubbing 之前设置,但是我还不知道将要传入的选项,从而破坏了测试的重点。

(在有人叫我之前:是的,在严格的单元测试教条中,对 A 的测试应该剔除 B 中的任何方法,并且需要大量剔除意味着你的代码首先是糟糕的。)

其次,将它放在测试的设置中感觉不对should,而不是之后放在单独的it ... do ... end块中。但是由于我不能创建一个实际的B(见上文),我也不能真正询问它的构建后状态。

有任何想法吗?

0 投票
1 回答
175 浏览

javascript - Javascript单元测试依赖项-当依赖对象更改时如何使测试失败

我有一个依赖于模型属性的控制器。我编写了一个测试该控制器并存根模型的测试,当模型属性名称更改时,如何使我的控制器测试失败?

这是一个例子:

模型:

控制器:

控制器测试:

只要“name”属性更改为其他内容,例如“name2”,我希望此测试失败。

有人对如何在 javascript 中执行此操作有很好的建议吗?

谢谢, 夏

0 投票
1 回答
1894 浏览

unit-testing - 存根测试类中的方法以测试另一个方法

我发现 stub 和 mock 在测试中非常有帮助。但我想知道一件事。我想一个例子会清楚地表明这一点。

做这样的事情是明智的吗?测试类的存根方法。或者它可能违反了一些规则?

PS。我无法重构代码

0 投票
9 回答
105443 浏览

javascript - 轻松清理 sinon 存根

有没有一种方法可以轻松地重置所有可以与 mocha 的 beforeEach 块一起干净地工作的 sinon spys 模拟和存根。

我看到沙盒是一种选择,但我看不出如何为此使用沙盒