簡體   English   中英

測試未導出模塊的節點方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM