2014-04-06 18 views
5

İşte normal bir düğüm modülü. tüm ihraç ama herkes nasıl foo3 test etmek bilirBir modülün dışa aktarılma düğüm yöntemlerini test etme

var foo1 = function() { console.log("Foo1"); } 
var foo2 = function() { console.log("Foo2"); } 
var foo3 = function() { console.log("Foo3"); } 

module.exports = { 
    foo1: foo1, 
    foo2: foo2 
} 

sınamak için gerekli olmayan bazı işlevler ile mi? Normalde düğüm-korumalı modülle modülleri test ederim. Ancak modül için verilen şeylerin sadece alay edilmesi mümkün, ancak yöntemlerin kapsamını değiştiremiyorum. Düğüm-korumalı alan-modülü ile test modülü için

Örnek: Yardım için

var SandboxedModule = require('sandboxed-module'); 
var user = SandboxedModule.require('./user', { 
    requires: {'mysql': {fake: 'mysql module'}}, 
    globals: {myGlobal: 'variable'}, 
    locals: {myLocal: 'other variable'}, 
}); 

teşekkürler!

+0

Hemen ayrıca und ile önek, foo3 ihracat erscore, bunun özel bir işlev olduğunu belirtir, örneğin '_foo3: foo3'. –

+0

[bir node.js modülünde dahili (ihracı olmayan) bir işleve nasıl erişilir ve test edilir?] Olası kopyası (http://stackoverflow.com/questions/14874208/how-to-access-and-test-an ilgili dahili olmayan-ihracat-fonksiyon-in-a-düğüm-js-modülü) – waterproof

cevap

6

Dilin kapsam belirleme kurallarını değiştiremezsiniz. Ama bunu aşabilirsin. Bir ortam değişkeni dışa aktarabilir ve değişken varsa, foo3'u da dışa aktarabilirsiniz. Yani bu

module.exports = { 
    foo1: foo1, 
    foo2: foo2 
} 

if (process.env.TESTING) { 
    module.exports.foo3 = foo3; 
} 

gibi testcases diğer ihraç fonksiyonlarını test gibi, foo3 test edebilirsiniz. Ancak, üretim ortamında, TESTING ortam değişkeninden bu yana, foo3 dışa aktarılmayacaktır.

Ayrıca, işlev adında _ kullanılması, işlev/değişken iç kullanım için olduğu, hiçbir dış kodun bu işlev/değişkene güvenmemesi gerektiği ve herhangi bir bildirimde bulunulmadan değiştirilebilir olduğu anlaşılır.

0

Bunu kullandım, işe yarıyor gibi görünüyor.

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)) 

çıkış

Hi Jim, double 10 = 20 
4 
İlgili konular