【发布时间】:2016-08-08 10:06:43
【问题描述】:
我正在尝试对我的一个依赖于底层操作系统的模块进行单元测试。
我正在尝试使用 mockery 来模拟 os.type() 以根据不同的测试装置返回 Linux/Windows_NT。
我使用 mocha 作为我的单元测试框架。
我有一个描述部分,它对我的模块的功能 A 进行单元测试,其中有 2 个描述块:一个用于 Windows,一个用于 Linux。
设置: var reload = require("require-reload")(require); var module_we_test = reload('...');
var linuxOsMock = {
type: function () {
return "Linux";
}
};
var windowsOsMock = {
type: function () {
return "Windows_NT";
}
};
describe('#the_module_we_test', function() {
before(function() {
mockery.enable({
warnOnReplace: false
});
});
after(function() {
mockery.disable();
});
describe('#windows', function() {
before(function() {
mockery.registerMock('os', windowsOsMock);
module_we_test = reload('...');
});
describe('#functionality A', function() {
it('...', function() {
/* tests functionality A which is OS dependnet */
module_we_test.functionalityA();
});
});
describe('#linux & darwin', function() {
before(function() {
mockery.registerMock('os', linuxOsMock);
module_we_test = reload('...');
});
describe('#functionality A', function() {
it('...', function() {
/* tests functionality A which is OS dependnet */
module_we_test.functionalityA();
});
});
});
});
我在每个依赖于操作系统的测试夹具之前需要我正在测试的模块的原因是因为该模块在全局范围内使用一次操作系统模块来决定一些变量值,如下所示:
var os = require('os');
var osType = os.type();
/* decide variable values based on os.type() return value */
所以,我认为除非我再次需要它,否则在每个夹具之前它都会加载最初加载的 OS 模块而不是我的模拟。
现在,问题是它只是没有替换模块中的 OS 模块,我不知道为什么。
【问题讨论】:
-
除了被测模块之外,您是否将
os模块加载到其他模块中?
标签: node.js unit-testing mocking mocha.js mockery