javascript - 使用 Jasmine 进行单元测试,模拟构造函数

标签 javascript unit-testing jasmine

我正在使用 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/

相关文章:

Angular Jest 或 Jasmine 测试 : How to Properly Spy/Mock a Static Object Called From Within a Tested Class?

unit-testing - Jasmine 中没有解决的 Angular promise

javascript - 在 Node.js 中上传和检索图像?

javascript - 为动态 div block 添加链接和图像

c# - 单元测试Elastic Search Nest客户端-BulkAll

对文件进行差异化的 C++ 单元测试

javascript - 使用页面重新加载和 iframe 对 JS 应用程序进行单元测试

javascript - 如何区分 javascript 中的 jquery 对象和 dict

javascript - 如何在Chrome扩展中同步执行外部js文件

c++ - 如何在 Visual Studio 中对 main() 进行单元测试