我正在使用 Jasmine 对 JavaScript 进行单元测试,但遇到了一些问题。
我有一个大文件要测试,它有很多依赖项,而这些依赖项有自己的依赖项。由于上述依赖关系,我想尽我所能。问题就在这里。我如何模拟一个构造函数,使其包含属于它的方法?
假设我正在测试 Map
类的方法 createMap
:
在 createMap
方法中,它使用
Layers
类构造函数
var layers = new Layers()
我正在监视它使用
spyOn(window, 'Layers').and.callThrough()
这很好用,但稍后在 createMap
方法中调用 layers.addLayer()
其中 addLayer
是 的方法图层
类。问题是,因为我模拟了 Layers
调用,所以它无法识别 addLayer
方法。
有没有办法模拟它以便它包含被调用类的所有方法,或者我唯一的选择是 stub 整个 Layers
类还是不模拟它?
或者什么是处理这个问题的好方法?我试过 spyOn(Layers, 'addLayer')
但它说找不到方法 addLayer
。
如果有点困惑,我很抱歉。我不知道该怎么问。
最佳答案
IMO,没有必要监视 window
,因为你可以很容易地 shadow the variable在本地范围内创建一个同名的 spy 对象:
describe('Map', function () {
var Layers;
beforeEach(function () {
Layers = function () {
// alternatively, you could move this to Layers.prototype
this.addLayers = jasmine.createSpy('Layers#addLayers');
};
});
/* ... */
});
如果你想要自动模拟和使用 CommonJS 模块,你可以尝试 Jest构建在 Jasmine 之上的框架。
关于javascript - 使用 Jasmine 进行单元测试,模拟构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31159696/