2016-11-18 1 views
0

скажу, в моей спецификации я пишу следовать,При тестировании модулей с помощью Jasmine, как потребовать файл без «подзадачи»?

const moduleA = require('moduleA'); 

... и в ModuleA это потребуется другой модуль сказать «moduleB»

В моем модульном тестировании мнения должен быть разделен, и вся зависимость следует издеваться. Но я не могу найти хороший способ требовать модуля А, не требуя одновременно модуля Б.

Любые предложения, как это можно сделать? Заранее спасибо.

Вещи, которые я пробовал: rewirejs (https://github.com/jhnns/rewire), что кажется хорошо, но все-таки нужно требовать moduleB, прежде чем вы можете заменить moduleB

ответ

0

Вы можете иметь ваши модули экспортировать функцию, которая будет принимать зависимость как аргумент (вместо того, чтобы требовать его). Таким образом, вы будете иметь:

/*moduleA*/ 
module.export = function(depB){ 
    /*your code here*/ 
}); 

И когда вы импортируете moduleA вы делаете:

var moduleB = require('moduleB'); 
var moduleA = require('moduleA')(moduleB); 

Альтернативный подход должен был бы пройти дерево зависимостей для субмодуля:

const platform = { 
    moduleA : require('moduleA'), 
    moduleB : require('moduleB'), 
} 

var moduleA = platform.moduleA(platform); 

И в moduleA:

module.export = function(platform){ 
    var moduleB = platform.moduleB; //your dependency here 
    //for consistency you'd also want to export a function that takes the depdency tree even if it doesnt take a dependency (so module configuration remains consistent across all your modules) 
} 

Было бы очень легко заменить зависимость для макета таким образом. Более подробно об этом - here и here.

+0

Благодарим за предложение, что в моем проекте для одного файла на самом деле требуется много зависимостей, поэтому потребуется модуль moduleA (moduleA) (moduleB, moduleC, moduleD, moduleE ...), который является довольно неуклюжим в моя ситуация. – Hao

+0

Я рекомендую второй подход тогда, это на последней ссылке, которую я положил. Я приведу пример. – MinusFour

+0

Это выглядит действительно здорово, спасибо! – Hao

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