进口香草/纯JS测试用量角器和相对路径(Imports in vanilla/pure JS tes

2019-10-29 15:52发布

到现在为止,我在测试我的无棱角的网站(我只有JS,没有节点,甚至没有ES6)用茉莉花,因果报应和Travis CI。

我现在想编写功能测试(如果我的词汇量是关闭的,我的意思是情景测试为此我要测试“视觉/ UI”测试)和谷歌指示我量角器。

输入

现在,我会完全不顾特拉维斯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 “托管”(甚至不知道,我的意思是我使用的是本地的,绝对的,路径...我被这句话对硒的webdriver是什么进口所有这些为它自己的使用(我可以看到它的工作多亏了混淆) console.log )。

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

正如你所看到的,我的进口也不是绝对必要的,但感觉“更清洁”的比较对象的常量,而不是一个字符串重复。 而且,也许,这些UI测试意思是“硬编码”,但我仍然在试图找到一种方式来导入文件在“香草JS”还挺方式。 如果它并不意味着,就这样吧。

阿贾克斯嘲讽

我需要拦截Ajax请求,并模拟反应,但jasmine.Ajax is undefined 。 我完全可以在我的“常规”测试(茉莉花+噶)来使用它,所以我想知道如果我应该安装其他NPM-包,比如量角器,HTTP客户端的情况下,或者如果有一个特殊的配置需要使用jasmine.Ajax

特拉维斯

最后,我是比较肯定的是,使用绝对(窗口)路径不会与特拉维斯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'自动“解析”到曾经在特拉维斯运行正确的路径? 我如何使用相对路径?

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

编辑:

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:

回答的相对路径的一部分(虽然还没有上特拉维斯测试过)。 我必须设置`的baseUrl:

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

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

Answer 1:

我不知道,是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的,所以我觉得应该反正工作。



文章来源: Imports in vanilla/pure JS testing with protractor and relative paths