Как проверить мой плагин jQuery с Gulp, Jasmine и NodeJS?
Я создал простой плагин jQuery, который изменяет HTML в соответствии с некоторыми простыми правилами, используя jQuery. Теперь мне нужно проверить, что это работает. Я использую Gulp для автоматизации сборки. Я решил использовать Жасмин для модульного тестирования. Мой вопрос, как мне запустить мой плагин из test.js
и подтвердить результат? У меня есть node.js, установленный на сервере сборки.
3 ответа
Решение
использование jsdom
эмулировать браузер в вашем Jasmine
модульные тесты.
подробности
jsdom
это "реализация многих веб-стандартов на чистом JavaScript... для использования с Node.js... для эмуляции достаточного количества подмножеств веб-браузера, чтобы быть полезной для тестирования и просмотра реальных веб-приложений".
jsdom
стал стандартом де-факто для эмуляции браузера вNode.js
, Он имеет более 2 миллионов еженедельных загрузок по npm и, помимо прочего, автоматически включается в качестве тестовой среды по умолчанию в Jest
,
jsdom
обеспечиваетwindow
необходимо инициализировать jQuery, загрузить плагин jQuery и протестировать его с помощьюJasmine
изнутри Node.js
как будто он работает в браузере:
раскрасить-spec.js
const { JSDOM } = require('jsdom');
const { window } = new JSDOM();
global.$ = require('jquery')(window);
require('../src/colorize');
describe('colorize', () => {
const div = $('<div/>');
const settings = { 30: 'highest', 20: 'middle', 10: 'lowest' };
it('should set the applicable class', () => {
div.text('35').colorize(settings);
expect(div.attr('class')).toBe('highest');
div.text('25').colorize(settings);
expect(div.attr('class')).toBe('middle');
div.text('15').colorize(settings);
expect(div.attr('class')).toBe('lowest');
div.text('5').colorize(settings);
expect(div.attr('class')).toBe('');
});
});
Я создал запрос на включение, который включает jsdom
как зависимость разработчика, удары node
до v8 в Travis CI
и включает в себя этот начальный модульный тест. Он проходит проверки сборки (включая этот модульный тест) и готов к слиянию.
Тестирование с помощью gulp и Karma. Предполагается, что вы установили все файлы gulp и их зависимости. Выполни задание
Создайте свой файл конфигурации кармы..
karma init karma.conf.js
gulp.task('tests', function (done) {
return karma.start({
configFile: __dirname + '/karma.conf.js',
singleRun: false
}, done);
});
gulp.task('default', ['tests']);
Отредактируйте файл conf согласно вашему пути к файлу
files: [
'<PATH-TO-TESTS>/*.js', '<PATH-TO-JQUERY>/jquery.js', '<PATH-TO-PLUGIN>/<PLUGIN-NAME>.js',
{
pattern: '<PATH-TO-TESTS>/*.html',
watched: true,
served: true,
included: false
}
]
Напишите свой тест JS
describe('myPlugin Initialisation', function() {
var el, myPlugin;
beforeEach(function(){
jasmine.getFixtures().fixturesPath = 'base/Tests';
loadFixtures('Template.html');
el = $('#myPlugin-Test');
myPlugin = el.myPlugin().data('myPlugin');
});
});
Сами тесты также имеют простую структуру, и пользователи жасмина снова будут знакомы:
`it('Should add the class "myPlugin" to the element', function() {
expect(el.hasClass('myPlugin')).toBe(true);
});`
Все, что вам нужно сделать сейчас, это запустить:
`gulp tests`
Вы можете сослаться на этот URL https://earthware.co.uk/blog/using-gulp-and-karma-to-test-a-jquery-plugin/
Лучше всего использовать gulp-jasmine-browser
ппм плагин. Это позволит вам запускать свои тесты в обычном браузере или безголовом браузере. Задание gulp, которое вам нужно создать, выглядит примерно так:
let gulp = require('gulp');
let jasmineBrowser = require('gulp-jasmine-browser');
gulp.task('jasmine', () => {
return gulp.src(['src/**/*.js', 'spec/**/*_spec.js'])
.pipe(jasmineBrowser.specRunner())
.pipe(jasmineBrowser.server({port: 8888}));
});
Или, если вы хотите работать на автономном сервере, измените последнюю строку на эту:
.pipe(jasmineBrowser.headless({driver: 'chrome'}));