2012-09-10 3 views
2

Я пытаюсь получить нижеприведенный код, когда мне пришло в голову, что я уже включил выражение вверху этого файла. Можете ли вы, как обезьяна патнет экспресс-объект после того, как он уже загружен?Как заглушить экспресс после того, как вы потребуете его с жасмином?

var express = require('express') 

Helper = (function() {                   

    var HelperObject = function(params) { 
    this.directories = params.directories; 
    }; 

    HelperObject.prototype.addStaticPath = function(app) { 
    for(i = 0; i < this.directories.length; i++) {            
     var static = express.static('/public'); 
     app.use(static); 
    } 
    }; 

    return HelperObject; 
})(); 
+0

сейчас я решил передать в оба выражают и приложение, так что я могу проверить взаимодействие в истинная изоляция. Тем не менее, я все равно хотел бы знать, сделал ли кто-то то, что я описал выше. –

ответ

2

Проблема заключается в том, что при создании модуля узла требуемого Modul связан в замыкании модуля, и вы не можете запустить шпионите на него потому что не видно в тесте.

Существует Gently, где вы можете переопределить запрос, но он покроет ваш код кодом, связанным с тестовым кодом.

Из документов:

Возвращается требуют функций, которые ловят ссылку на все необходимых модули в gently.hijacked.

Чтобы использовать эту функцию, включите такую ​​строку в свой 'my-module.js'.

if (global.GENTLY) require = GENTLY.hijack(require); 

var sys = require('sys'); 
exports.hello = function() { 
    sys.log('world'); 
}; 

Теперь вы можете написать тест для модуля выше:

var gently = global.GENTLY = new (require('gently')) 
    , myModule = require('./my-module'); 

gently.expect(gently.hijacked.sys, 'log', function(str) { 
    assert.equal(str, 'world'); 
}); 

myModule.hello(); 
+0

интересные ответы на вопросы! –

 Смежные вопросы

  • Нет связанных вопросов^_^