[英]Testing not exported node methods of a module
這是一個普通的節點模塊。 有些功能並非全部導出,但需要進行測試
var foo1 = function () { console.log("Foo1"); }
var foo2 = function () { console.log("Foo2"); }
var foo3 = function () { console.log("Foo3"); }
module.exports = {
foo1: foo1,
foo2: foo2
}
誰知道如何測試foo3? 通常我用node-sandboxed-module測試模塊。 但是只有模擬給定的東西才有可能,但是我不能改變方法的范圍。
使用node-sandboxed-module測試模塊的示例:
var SandboxedModule = require('sandboxed-module');
var user = SandboxedModule.require('./user', {
requires: {'mysql': {fake: 'mysql module'}},
globals: {myGlobal: 'variable'},
locals: {myLocal: 'other variable'},
});
感謝幫助!
您無法更改該語言的范圍規則。 但你可以解決這個問題。 您可以導出環境變量,如果該變量存在,您也可以導出foo3
。 像這樣
module.exports = {
foo1: foo1,
foo2: foo2
}
if (process.env.TESTING) {
module.exports.foo3 = foo3;
}
因此,測試用例可以測試foo3
,就像測試其他導出函數一樣。 但是,在生產環境中,由於TESTING
環境變量不存在,因此不會導出foo3
。
此外,在函數名稱中使用_
被理解為,函數/變量供內部使用,外部代碼不應依賴於該函數/變量,並且在不另行通知的情況下進行更改。
我用這個,似乎工作。
sample.js
function double(p2) {
return p2*2
}
module.exports = function(p, p2) {
return "Hi "+p+", double "+p2+" = "+double(p2)
}
sample_test.js
function load(file_name) {
global.module = {}
const contents = require('fs').readFileSync(file_name, 'utf8');
const vm = require('vm')
new vm.Script(contents).runInThisContext();
}
load("./sample.js")
console.log(global.module.exports("Jim","10"))
console.log(double(2))
產量
Hi Jim, double 10 = 20
4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.