2016-09-11 2 views
1

Я хотел бы протестировать прототипы, которые я создаю.Оценить помощники - это тот же контекст, что и проверенный файл

Мой набор вверх состоит из 3 файлов:

  • base.js - базовый файл, что все мои вторые файлы имеют общую

    function prop(to, name, func) { 
        Object.defineProperty(to.prototype, name, { 
         value: func, 
         writable: true, 
         configurable: true 
        }); 
        return func; 
    } 
    
  • Array.js - файл, изменяющие прототип данного объекта.

    prop(Array, 'hasPresent', function(what) { 
        return !!~this.indexOf(what) 
    }); 
    
  • /tests/Array.js - сам Тестовые

    describe('hasPresent()',function(){ 
        it('number', function(done){ 
         expect([0,1,2].hasPresent(0)).toBe(true) 
         done() 
        }) 
    }) 
    

Все это делается из nodeJS, что часы файл для изменения. Меня беспокоит, что он вернет ошибку из второго файла (prop is not defined ... at Array.js:1). Это говорит мне, что эти файлы не оцениваются в одном контексте. Есть ли способ сделать эту работу? Или как получить переменную __direcotory в тестовом файле, при запуске с узла.

Моя установка в nodejs:

jasmine.loadConfig({ 
    spec_files: ['Base.js','Array.js'] 
    helpers: ['Base.js','Array.js'] 
}) 

jasmine.execute(['tests/Array.js']); 

PS .: Я попытался положить Eval в tests/Array.js, но рабочий каталог забыто при загрузке, так что я должен был бы использовать абсолютный путь, если есть способ работа вокруг этого, было бы здорово.

ответ

0

Вам просто нужно использовать нормальный механизм для модуля Node.js: https://nodejs.org/api/modules.html

Вот основной пример, который вы можете адаптироваться к тестированию:

В содержимом foo.js, тогда:

const circle = require('./circle.js'); 
console.log(`The area of a circle of radius 4 is ${circle.area(4)}`); 

содержание circle.js:

const PI = Math.PI; 
exports.area = (r) => PI * r * r; 
exports.circumference = (r) => 2 * PI * r; 
+0

Я понимаю, что делает I t путь к модулю был бы способом, но моя библиотека содержит только прототипы, а затем файл отправляется в браузер, поэтому я не хочу изменять их для узла. – Akxe