2016-07-11 1 views
1

Я настраиваю модульные тесты ES6 в своем проекте, и у меня возникают проблемы с их работой с библиотеками. Я думал, что буду использовать jQuery как тест, чтобы попытаться заставить его работать. Без библиотек тесты работают.

Обратите внимание, что jQuery импортируется в мой файл main.js, поэтому он доступен во всем проекте.

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

class Test { 
    constructor(options) { 
    this.init(); 
    } 

    init() { 
    $('.test-div').addClass('test'); 
    } 

    sayHello() { 
    return 'hello world!'; 
    } 
} 

export default Test; 

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

import jsdom from 'mocha-jsdom'; 
import chai from 'chai'; 
import Test from './test'; 

chai.should(); 

describe('Frequency',() => { 

    var $; 
    jsdom(); 

    before(() => { 
    $ = require('jquery'); 
    }) 

    it('should output hello world',() => { 
     const test = new Test(); 
     test.sayHello().should.equal('hello world!'); 
    }); 

}); 

Если удалить функцию init(), тест работает. Однако функция before не импортирует jQuery для теста. Ошибка я получаю в консоли выглядит следующим образом:

ReferenceError: $ is not defined 
    at Frequency.init 
+0

Вы уверены, что '$' определен для файла, который экспортирует 'Test'? Обратите внимание, что ваша спецификация не требует 'main.js', она требует только'./Test', поэтому ваш файл './Test' также должен импортировать jquery, то есть' import $ from 'jquery'' в './Test' –

+0

Thanks для ответа @MauricioPoppe - я импортировал 'main.js', и теперь он жалуется на такие вещи, как picturefill, а затем окно не определяется. Должен ли я прикрепить к нему файл jspm.config? – 30secondstosam

ответ

1

Я скопировал свой код и получил его на работу, изменяя before крюк:

before(() => { 
    $ = require('jquery'); 
    global.$ = $; 
}); 

Если вы читали mocha-jsdom «s документации вы» Посмотрим, что он помещает глобальные космические символы, такие как window и document. Когда вы загружаете jquery, он находит window и добавляет себя как window.$. В браузере это также делает $ видимым в глобальном пространстве потому, что windowis глобальное пространство. Однако в узле глобальное пространство global, и поэтому вам нужно поставить $ в него самостоятельно.

+0

Спасибо, что нашли время, чтобы ответить на этот вопрос @Louis. К сожалению, я до сих пор получаю ошибку. Ошибка: не удается найти модуль jquery в Контексте. (test.spec.js: 13: 9) в Object.done (node_modules/mocha-jsdom/index.js: 70: 7) at node_modules/jsdom/lib/jsdom.js: 249: 18. Могу ли я спросить, что вы используете в командной строке? – 30secondstosam

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