直到现在,我仍在使用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请求和模拟响应,但需要jasmine.Ajax is undefined
。我完全可以在“常规”测试(Jasmine + Karma)中使用它,因此我想知道是否应该安装其他protractor-http-client之类的npm软件包,或者是否有特殊的软件包。使用jasmine.Ajax
所需的配置。
最后,我相对确定使用绝对(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');
在测试中。
答案 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,因此我认为它应该仍然可以工作。