如何测试 javascript 方法是否创建一个对象并调用该对象上的方法
How to test that a javascript method creates an object and calls a method on that object
我正在更新用nodejs编写的服务器代码,并尝试随时添加单元测试,但对于以下情况,我找不到好的解决方案:
classX.prototype.methodX = function () {
// Create new session
var session = new classY();
// Add the new session to the global list
self.sessions[session.sessionId] = session;
session.sendPushNotificationToCallee(); }
我可以轻松测试会话对象是否已添加到会话列表中,但是如何检查是否确实调用了sendPushNotificationToCallee?我的初衷是使用 sinon.js间谍,但我找不到一种方法来做到这一点,因为对象是在方法中创建的......
谢谢
如果您的代码满足以下假设,则非常简单:
-
classY
是一个标准的JS构造函数,即它的方法在其原型上定义。这意味着您可以将您的 sinon 间谍附加到那里。 -
classX
和classY
位于单独的模块中。因为node的require
是一个单例,这意味着你可以在测试中require('classY')
,你会得到与classX
模块完全相同的对象。
那么一个简单的测试将如下所示:
var classX = require('./classX'); // module under test
var classY = require('./classY');
var sinon = require('sinon');
var assert = require('assert');
// spy on a method
var spy = sinon.spy(classY.prototype, 'sendPushNotificationToCallee');
// instantiate the class and call the method under test
var instance = classX();
instance.methodX();
// test
assert.ok(spy.calledOnce);
// restore orignal method
classY.prototype.sendPushNotificationToCallee.restore();
相关文章:
- 从 javascript 中的对象方法返回一个对象
- 什么'是从对象列表中一次编辑一个对象的正确Angular/Firebase方法
- 有没有一种方法可以创建一个对象并同时为其指定一个动态特性
- 从一个对象中找出所有方法
- 将此(对象)传递到一个对象方法嵌套方法中
- 为对象原型提供一个方法,该方法指向对象自身属性的值
- 用javascript在一个对象的两个键上声明两个数组的简洁方法是什么
- 你能得到一个方法的对象吗?
- Javascript:如何在不复制但链接的情况下将另一个对象 B 的方法混合到我的对象 A
- 将第一个(对象的)数组的属性复制到不同长度的另一个(对象)数组的Javascript方法
- 如何测试 javascript 方法是否创建一个对象并调用该对象上的方法
- Jquery:扩展一个对象来修改一个方法
- 从JSON创建一个对象,并在Javascript中给它一些方法
- JavaScript - 尝试从另一个对象内部访问一个对象方法,得到未定义的错误
- 在Javascript中声明一个对象上的方法时,如何正确引用该对象上的一个方法集
- 与许多事件侦听器和函数引用一个对象相比,什么是更好的方法
- 将__proto__值从一个对象复制到另一个对象的正确方法
- jQuery使用一个对象's方法作为事件处理程序
- 为什么一个对象的方法不适用于另一个对象
- 如何将一个方法的返回值赋给Javascript中的另一个对象属性?