2016-02-01 4 views
3

У меня есть эти файлы:Стыковка вложенного модуля в Node.js?

File1.js

var mod1 = require('mod1'); mod1.someFunction() ...

File2.js

var File1 = require('./File1');

Теперь в то время как во время написания модульных тестов для Файл2, можно иметь MOD1 насмешливо, так что я не звоню в mod1.someFunction()?

+2

Да, это возможно. Вы должны прочитать что-нибудь об инъекции зависимостей. И посмотрите на sinon.js. – migg

+0

Взгляните на этот урок о насмешливости: https://www.youtube.com/watch?v=fgqh-OZjpYY Он показывает технику, которую вы можете использовать только для этого. И да, обязательно проверьте синус. –

+0

как синон обратится к этому? – dm03514

ответ

3

Я обычно используя mockery модуль, как следующий:

Lib/file1.js

var mod1 = require('./mod1'); 
mod1.someFunction(); 

Библиотека/file2.js

var file1 = require('./file1'); 

Библиотека/mod1.js

module.exports.someFunction = function() { 
    console.log('hello from mod1'); 
}; 

тест/file1.js

/* globals describe, before, beforeEach, after, afterEach, it */ 

'use strict'; 

//var chai = require('chai'); 
//var assert = chai.assert; 
//var expect = chai.expect; 
//var should = chai.should(); 

var mockery = require('mockery'); 

describe('config-dir-all', function() { 

    before('before', function() { 
    // Mocking the mod1 module 
    var mod1Mock = { 
     someFunction: function() { 
     console.log('hello from mocked function'); 
     } 
    }; 

    // replace the module with mock for any `require` 
    mockery.registerMock('mod1', mod1Mock); 

    // set additional parameters 
    mockery.enable({ 
     useCleanCache:  true, 
     //warnOnReplace:  false, 
     warnOnUnregistered: false 
    }); 
    }); 

    beforeEach('before', function() { 

    }); 

    afterEach('after', function() { 

    }); 

    after('after', function() { 
    // Cleanup mockery 
    after(function() { 
     mockery.disable(); 
     mockery.deregisterMock('mod1'); 
    }); 
    }); 

    it('should throw if directory does not exists', function() { 

    // Now File2 will use mock object instead of real mod1 module 
    var file2 = require('../lib/file2'); 

    }); 

}); 

Как было предложено ранее, sinon модуль очень удобен для создания издевательствами.

+0

Спасибо, это сработало! Я на самом деле пытался опротестовать раньше, но имел имя фальшиво в цитатах и ​​не понимал. – Arjun

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