Импорт в тесте vanilla / pure JS с транспортиром и относительными путями - PullRequest
0 голосов
/ 25 июня 2019

До сих пор я тестировал свой неангулярный веб-сайт (у меня только 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'); в тесте.

1 Ответ

0 голосов
/ 25 июня 2019

Я не уверен, это синтаксис, связанный с Node.js, но для импорта / экспорта вы можете использовать export/require, например,

export let EXCEPTIONS = {
---- your code ----
}
const EXCEPTIONS = require(pathToExceptionsFile)

describe('The main page', function () {
    ---- Test code here ---
    expect(element(by.className('ajs-content')).getText()).toEqual(new EXCEPTIONS.NoParametersDetectedInURI().description);
})

или как это

let EXCEPTIONS = {
---- your code ----
}

module.exports = EXCEPTIONS
const EXCEPTIONS = require(pathToExceptionsFile)

describe('The main page', function () {
    ---- Test code here ---
    expect(element(by.className('ajs-content')).getText()).toEqual(new EXCEPTIONS.NoParametersDetectedInURI().description);
})

Я думаю, это должно работать и в vanila JS. Но пока вы используете Protractor, вы уже используете Node.js, поэтому я думаю, что он все равно должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...