gpt4 book ai didi

javascript - 如何在 Mocha 测试中模拟全局变量(定义、模块、窗口)?

转载 作者:搜寻专家 更新时间:2023-11-01 00:01:43 25 4
gpt4 key购买 nike

为了追求 100% 的代码覆盖率,我尝试使用 mocha 来测试我的 javascript 模块是否在 AMD 下正确加载, CommonJS/Nodebrowser 条件。我使用的模式如下:

我的模块.js

(function(global){

function MyClass(){}

// AMD
if(typeof define === 'function' && define.amd){
define(function(){
return MyClass;
});

// CommonJS/Node
} else if (typeof module !== 'undefined' && module.exports){
module.exports = MyClass;

// Browser
} else {
global.MyClass = MyClass;
}

})(this);

因为我是用 Node 运行我的测试,所以 define 从未被定义,而 module 总是被定义;所以“CommonJS/Node”条件是唯一经过测试的条件。

到目前为止我尝试过的是这样的:

我的模块.test.js

var MyClass = require('./my-module');

describe('MyClass', function(){
// suite of tests for the class itself
// uses 'var instance = new MyClass();' in each test
// all of these tests pass
});

describe('Exports', function(){
// suite of tests for the export portion
beforeEach(function(){
MyClass = null; // will reload module for each test
define = null; // set 'define' to null
module = null; // set 'module' to null
});

// tests for AMD
describe('AMD', function(){
it('should have loaded as AMD module', function(){
var define = function(){};
define.amd = true;

MyClass = require('./my-module'); // might be cached?
// hoping this reloads with 'define' in its parent scope
// but it does not. AMD condition is never reached.

expect(spy).to.have.been.called(); // chai spy, code omitted
});
});
});

我正在使用 spy 检查 define 是否已被调用,但是该模块没有显示任何迹象表明它曾经被可用的 define 重新加载过。我怎样才能做到这一点?

是否有一种安全的方法来使 module 无效,以便我也可以测试浏览器状况?

最佳答案

您可能想查看重新布线模块。我不是 100% 确定,但我认为它会让你做你需要的。

https://github.com/jhnns/rewire

关于javascript - 如何在 Mocha 测试中模拟全局变量(定义、模块、窗口)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28334692/

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