Денис Хананеин, Яндекс.
Денис Хананеин, разработчик интерфейсов, Яндекс
<script src="../../test/yui3combo/combo.js">
<link href="../../test/yui3combo/combo.css"/>
// helper
<script src="../../test/run-test-case.js">
Копировать — вставить
testMapEvent: () => {
// какие-нибудь действия
Y.assert(
res == '256,256/0,0/328,228' && aliasRes == res,
'Координаты вычислены неправильно, получено: ' + res
);
}
testMapEvent
Y.assert(a & b & c & d, 'error')
this.wait … this.resume
ymaps.geocode('174.184804,77.380152').then(res => {
this.resume(() => {
Y.assert(len == 34,'неверное количество геообъектов');
});
}, this);
this.wait(// Y.error);
Плюсы | Минусы |
---|---|
быстро | дорого |
вся команда понимает, как писать тесты |
у всех есть задачи |
все любят писать тесты… |
Плюсы | Минусы |
---|---|
команда работает | человека жалко |
есть ответственный | долго |
если стажер или практикант — хорошее знакомство с проектом |
команде сложно начать писать тесты |
Плюсы | Минусы |
---|---|
переписывание выполняется в фоне | долго |
есть время разобраться и понять, как что работает |
очень-очень долго |
быстро привыкается к хорошему | в проекте две версии тестов |
Если рефакторинг ломает много старых тестов,
допускается просто поправить их.
ymaps.modules.define('test.Map', [
'Map',
'util.bounds'
], function (provide, Map, utilBounds) {
// Тесты
});
describe('Map', function () {
it('Должен изменить центр карты', done => {
myMap.setCenter([55, 37]).done(newCenter => {
expect(newCenter).to.be('55,37');
done();
});
Тесты простые, для асинхронных интерфейсов нужно просто вызвать done
Часто в проекте есть зависимость от какой-либо библиотеки. Ещё она сама может загрузить за что-нибудь. В Mocha окружение у тестов всегда одно — скрипты один раз подгрузились и всё.
Несколбко тест-кейсов создают в BODY инпут и что-то с ним делает. Может оказаться, что инпут уже есть, ID не уникальный и т.д.
server.ru/tests.html?module=test.control.Button
// Получим список модулей.
let module = util.get('module', 'all');
// Подгрузим и запустим необходимые.
ymaps.modules.require(module, () => {
// Run mocha
});
ymaps.modules.define('test.Map', [
'Map',
'util.bounds'
], (provide, Map, utilBounds) => {
// Тесты
});
passing: 107
∆ 'test.LoadingObjectManager'
∆ 'test.ObjectManager'
∆ 'test.RemoteObjectManager'
…
∆ 'test.objectManager.overlays'
failing: 0
Денис Хананеин, разработчик интерфейсов