До сих пор я тестировал свой неангулярный веб-сайт (у меня только JS, нет узла, даже ES6) с использованием Jasmine, Karma и Travis CI.
Я сейчас пытаюсь написать функциональные тесты (если мой словарь отключен, я имею в виду тесты сценариев, для которых я хочу протестировать тесты "visual / UI"), и Google направил меня в Protractor.
Импорт
Пока я полностью игнорирую Трэвиса CI . Единственный способ «добраться» до моей страницы - локальный путь browser.get('file:///C:/local/path/to/project/index.html');
Пока у меня есть этот тест
describe('The main page', function () {
beforeEach(function () {
// jasmine.Ajax.install(); // unabled to reuse that
dv.ignoreSynchronization = true;
});
/*
afterEach(function () {
jasmine.Ajax.uninstall();
});
// */
it('should display an error message in the alert if no parameters are provided', function () {
browser.waitForAngularEnabled(false);
get('/index.html'); // edited
browser.sleep(500);
element(by.tagName('ajs-content')).getText().then(console.log);
expect(element(by.className('ajs-content')).getText()).toEqual(new EXCEPTIONS.NoParametersDetectedInURI().description);
});
});
Здесь я получаю сообщение об ошибке Failed: EXCEPTIONS is not defined
, но, в отличие от кармы, если я включаю мои исходные файлы в protractor.conf.js как таковой
specs: [
'src/lib/**/*.js',
'src/js/**/*.js',
'test/protractor/**/*.spec.js',
],
Я получаю ошибки, подобные document is not defined
, и я не думаю, что вообще должен их импортировать, поскольку index.html
"размещен" (даже не уверен, я имею в виду, что я использую локальный, абсолютный путь). .. Я смущен этим утверждением) на веб-драйвере Selenium все это импортируется для его собственного использования (я вижу, как оно работает благодаря console.log
).
Я хочу использовать ( import ) свой собственный код для использования объекта EXCEPTIONS
, а не жесткого кода toEqual("<some error message that I should never ever update in the exception.js file>")
, но, поскольку я не использую ни узел, ни ES6, я никогда однажды есть какой-то module.export
.
Как видите, мой импорт не является абсолютно необходимым, но он чувствовал себя "чище" по сравнению с константой объекта, а не с дубликатом строки. И, может быть, эти тесты пользовательского интерфейса должны быть «жестко запрограммированы», но я все еще пытаюсь найти способ импортировать файл в некотором роде «vanilla JS». Если это не так, пусть будет так.
Аякс издевается
Мне нужно перехватить ajax-запросы и фальсифицировать ответы, но jasmine.Ajax is undefined
. Я вполне могу использовать его в своих «обычных» тестах (Jasmine + Karma), поэтому я хотел бы знать, должен ли я установить другие npm-пакеты, такие как, например, protractor-http-client , или если для использования jasmine.Ajax
требуется специальная конфигурация.
Travis
Наконец, я относительно уверен, что использование абсолютного (windows) пути не будет работать с Travis CI, и, основываясь на этом вопросе SO , я обновил свой код, чтобы попытаться достичь index.html
с относительным путем использования global.basePath = __dirname;
и использованием browser.get(global.basePath + '/index.html');
(также пробовал с '\\'
, с начальным file:///
и т. д.), но, если я заставляю страницу спать несколько секунд, я всегда на basePath
, в отличие от абсолютного).
Я понимаю, что это были бы не "относительные" пути, а скорее "динамический" абсолютный путь, но, в конце концов, даже при замене "\" на "/" и буквально с точным та же строка, что и при наборе текста в себе:
let pagePath = global.indexPath.replace(/\\/g, "/");
console.log("trying to get", pagePath);
browser.get(basePath);
browser.sleep(5000);
Вы сталкивались с этим? Будет ли 'file:///C:/local/path/to/project/index.html'
автоматически "разбираться" по правильному пути после запуска в Travis? Как я могу использовать относительный путь?
Должен ли я разделить каждый заголовок на вопрос?
Edit:
exception.js
образец.
В основном они являются конструкторами для ошибок, где атрибут description
всегда определен. Я знал, что что-то забыл, когда отправил ахах
let EXCEPTIONS = {
DefaultException: function(_type, _description, _msg) {
this.type = _type;
this.description = _description;
this.message = _msg || undefined;
},
NoParametersDetectedInURI: function (msg) {
EXCEPTIONS.DefaultException.call(this,
"NoParametersDetectedInURI",
"No URI parameters detected",
msg);
},
.
.
.
};
Редактировать 2:
Отвечает об относительной части пути (хотя еще не проверял на Трэвисе). Я должен был установить `baseUrl:
exports.config = {
baseUrl: 'file:///' + __dirname,
.
.
}
в файле конфигурации и затем get('/index.html');
в тесте.