2016-11-14 2 views
1

Я использую Jasmine-Node для проверки кода Javascript.Как экспортировать и импортировать два разных объекта функции в JavaScript?

Как можно экспортировать два разных функциональных объекта, таких как Confusions1 и Confusions2, чтобы оба они были доступны в тестовом файле Jasmine-Node?

Моей попытка выглядит следующим образом:

// confusions.js 
var Confusions1 = function() {}; 

Confusions1.prototype.foo = function(num) { 
     // keep track of how many times `foo` is called 
     this.count++; 
} 

module.exports = Confusions1; 

// second function object 

var Confusions2 = function() {}; 

Confusions2.prototype.foo = function() { 
     var a = 2; 
     this.bar(); 
}; 

Confusions2.prototype.bar = function() { 
     return this.a; 
} 

module.exports = Confusions2; 

И мой файл жасмин Test:

// confusions.spec.js 

var Confusion = require('./confusions.js'); 

describe("chapter 1, common misconception ", function() { 
     describe("to assume `this` refers to the function itself: ", function() { 
       var confusion = new Confusion(); 

       // some test code omitted 


     }); 

     describe("to assume `this` refers to the function's scope", function() { 
       var confusion = new Confusion(); 

       // test code omitted 

     }); 
}); 

Я хочу это так, чтобы Confusions1 и Confusions2 из confusions.js оба использовать в двух вложенных описывают блоки в confusions.spec.js

Я предполагаю, что мне нужно как-то инициализировать разные объекты после запроса файла var Confusion = require('./confusions.js'); Что-то вроде var confusion1 = new Confusions1(); var confusion2 = new Confusions2(); Но как именно (без разделения обоих объектов в двух отдельных файлах)?

ответ

1

Итак, вы хотите иметь модуль, который ведет себя как контейнер экспортируемых значений, в других словах вы хотите экспортировать две функции:

// foo.js 
var Confusion1 = function() {} 
var Confusion2 = function() {} 
... 
exports.Confusion1 = Confusion1 
exports.Confusion2 = Confusion2 

Везде, где вам нужен этот модуль можно потребовать это такие вещи, как:

// bar.test.js 
var confusions = require('path-to-the-foo-file') 
console.log(confusions.Confusion1) 
console.log(confusions.Confusion2) 

Кроме того, как это кажется, что вы должны проверить, как модульную систему, которую вы используете работы в целом, проверить этот ответ: module.exports vs exports in Node.js

+0

есть ли способ быстро тес т ваш код без шаблона жасминового узла? Когда я настраиваю свой тест с вашим подходом, я получаю TypeError, потому что Confusion1/Confusion2 не определено в тесте ... – StandardNerd

+0

Что такое шаблон узла? Ничто не связано с какой-либо тестовой средой, это всего лишь узловая модульная система. Создайте два модуля сверху и запустите 'node bar.test.js' – Srle

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