gpt4 book ai didi

javascript - 如何使用 jasmine-node 监视依赖模块内的方法

转载 作者:行者123 更新时间:2023-12-02 14:41:13 24 4
gpt4 key购买 nike

我正在尝试为一个模块(例如 moduleA)编写 Jasmine 测试,该模块“需要”另一个模块(moduleB)。

======> moduleB.js

function moduleBFunction(){
console.log('function inside moduleB is called');
}

======> moduleA.js

var moduleB = require('./moduleB');
function moduleAfunction(input){
if(input){
moduleB.moduleBFunction()
}

}

我想编写一个 Jasmine 测试用例,测试当我调用 moduleAfunction 时,它是否调用 moduleBfunction 。我尝试使用spyOn() 编写测试。但我不确定如何模拟依赖模块内的方法。我做了一些研究,发现我可以使用“重新布线”模块来实现此目的,如下所示

var moduleB = require('../moduleB');
moduleB.__set__('moduleBfunction', moduleBfunctionSpy);
moduleA.__set__('moduleB', moduleB);
it('should call moduleBfunction', function(){
moduleA.moduleAfunction()
expect(moduleB.moduleBfunction()).toHaveBeenCalled()
});

但我觉得应该有一个更简单的方法。

请提出建议。

最佳答案

我推荐sinon.js

var sinon = require('sinon')
var moduleA = require('../moduleA')
var moduleB = require('../moduleB')


it('should call moduleBfunction', function() {
var stub = sinon.stub(moduleB, 'moduleBfunction').returns()
moduleA.moduleAfunction()
expect(moduleB.moduleBfunction.calledOnce)
stub.restore()
})

您可以轻松伪造许多不同的行为,例如:

  • stub 抛出
  • stub 返回某个值
  • stub yield (模仿异步回调)
  • stub 的工作仅限于某些输入参数

在执行下一个测试之前,不要忘记恢复每个 stub 。最好使用沙箱和 afterEach/beforeEach

describe('tests which require some fakes', function() {
var sandbox

beforeEach(function() {
sandbox = sinon.sandbox.create()
})

afterEach(function() {
sandbox.restore()
})
})

关于javascript - 如何使用 jasmine-node 监视依赖模块内的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36988073/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com