导入带有量角器和相对路径的香草/纯JS测试

时间:2019-06-25 10:10:09

标签: javascript protractor karma-jasmine travis-ci functional-testing

直到现在,我仍在使用Jasmine,Karma和Travis CI测试我的非Angular网站(我只有JS,没有节点,甚至没有ES6)。

我现在正在尝试编写功能测试(如果我的词汇量不对,我的意思是要测试“视觉/ UI”测试的场景测试),并且google将我定向至量角器。

导入

现在,我将完全无视Travis 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 Webdriver上是导入所有这些信息以供自己使用(由于console.log,我可以看到它的工作)。

我想使用( import )自己的代码来使用EXCEPTIONS对象,而不是硬编码toEqual("<some error message that I should never ever update in the exception.js file>"),但是,因为我都没有使用node或ES6,我从来没有过某种module.export

如您所见,我的导入不是绝对必要的,但是与对象的常量(而不是字符串重复)进行比较,感觉“更干净”。而且,也许这些UI测试本来是“硬编码的”,但我仍在尝试找到一种以“普通JS”方式导入文件的方法。如果不是故意的话,那就这样吧。

Ajax模拟

我需要拦截ajax请求和模拟响应,但需要jasmine.Ajax is undefined。我完全可以在“常规”测试(Jasmine + Karma)中使用它,因此我想知道是否应该安装其他protractor-http-client之类的npm软件包,或者是否有特殊的软件包。使用jasmine.Ajax所需的配置。

Travis

最后,我相对确定使用绝对(windows)路径不适用于Travis CI,based on this SO question我更新了代码以尝试使用相对路径到达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中运行后是否会自动“解析”到正确的路径中?如何使用相对路径?

我应该将每个标题分成一个问题吗?

编辑:

exception.js示例。 它们基本上是错误的构造函数,其中总是定义description属性。 我知道我发布ahah时忘了一些东西

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:

解答了相对路径部分(尽管尚未在Travis上进行测试)。我必须设置`baseUrl:

exports.config = {
    baseUrl: 'file:///' + __dirname,
    .
    .
}

在配置文件中,然后get('/index.html');在测试中。

1 个答案:

答案 0 :(得分:0)

我不确定,这是与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中工作。但是,只要您使用量角器,就已经使用了Node.js,因此我认为它应该仍然可以工作。