运行 Angular 2 位桶管道中的量角器
Run Angular 2 Protractor in Bitbucket Pipelines
我是 Bitbucket Pipelines 的新手,所以我在尝试 运行 我的 Angular 2 应用程序的量角器 E2E 测试时遇到了一些困难。我的 bitbucket-pipelines.yml 看起来像这样
image: adrianmarinica/bitbucket-pipelines-protractor
pipelines:
default:
- step:
caches:
- node
script: # Modify the commands below to build your repository.
- npm install
- protractor protractor.conf.js
当所有依赖项都安装完毕并且量角器开始运行时,出现此错误
我怎样才能 运行 我的测试在我的本地机器上成功完成?
默认情况下,Protractor 等待 angular 变量出现在网页中。它等待十秒的默认时间,然后超时。如果您的应用程序不是 angular 应用程序,您可以通过设置
将其关闭
browser.waitForAngularEnabled(false);
在您的 describe
块中,在 it
部分之前。
PS - 如果上述方法不起作用,请在第一个 describe
块中尝试 browser.ignoreSynchronization = true;
,在 it
部分之前,这会使 Protractor 不等待 Angular promises.
为了在 bitbucket 管道上进行 e2e 测试,我必须对 bitbucket 进行一些更改-pipelines.yml、package.json 和 protractor.conf.js.
首先,bitbucket-pipelines.yml 看起来像这样。我们使用 adrianmarinica 提供的 docker 图像而不是默认节点图像。
# You can specify a custom docker image from Docker Hub as your build environment.
image: adrianmarinica/bitbucket-pipelines-protractor
pipelines:
branches:
master:
- step:
caches:
- node
script:
- npm install
- npm start
- protractor protractor.conf.js
然后,package.json看起来像这样
"scripts": {
...
"start": "ng serve &"
...
}
这里的关键变化是启动命令中的“&”。这将 运行 ng 在后台服务,允许触发量角器命令。
最后,对 protractor.conf.js
进行一些调整
const { SpecReporter } = require('jasmine-spec-reporter');
exports.config = {
allScriptsTimeout: 1800000,
specs: [
'./e2e/**/*.e2e-spec.ts'
],
getPageTimeout: 120000,
capabilities: {
'browserName': 'chrome',
'chromeOptions': {
'args': [
'--no-sandbox',
'--disable-gpu'
]
}
},
useAllAngular2AppRoots: true,
directConnect: true,
baseUrl: 'http://localhost:4200/',
framework: 'jasmine',
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 120000,
print: function () { }
},
beforeLaunch: function () {
require('ts-node').register({
project: 'e2e/tsconfig.e2e.json'
});
},
onPrepare() {
jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
}
};
如果您的测试 运行 在本地成功,它们也应该在管道中,根据此配置,环境应该相同。
这只是我的示例:(非 AngularJS 应用程序)
内部来源:test_specs.js、conf.js、bitbucket.pipeline.yml
来源:(比特桶)test_spec.js
describe("Facebook App test", function(){
beforeEach(function(){
browser.driver.ignoreSynchronization = true;
});
it("should launch the browser", function(){
browser.driver.get("https://www.facebook.com");
console.log("Launch the browser");
}
});
---------------------------
Source: conf.js
exports.config = {
directConnect: true,
allScriptsTimeout: 20000,
capabilities: {
'browserName': 'chrome'
},
// Framework to use. Jasmine is recommended.
framework: 'jasmine',
// Spec patterns are relative to the current working directory when
// protractor is called.
specs: ['test_spec.js'],
// Options to be passed to Jasmine.
jasmineNodeOpts: {
//showColors: true,
defaultTimeoutInterval: 30000
}
};
-----------------------------
bitbucket.pipeline.yml ( **Is this correct?** )
pipelines:
branches:
master:
- step:
caches:
- node
script:
- npm install
- npm start
- protractor protractor.conf.js
我是 Bitbucket Pipelines 的新手,所以我在尝试 运行 我的 Angular 2 应用程序的量角器 E2E 测试时遇到了一些困难。我的 bitbucket-pipelines.yml 看起来像这样
image: adrianmarinica/bitbucket-pipelines-protractor
pipelines:
default:
- step:
caches:
- node
script: # Modify the commands below to build your repository.
- npm install
- protractor protractor.conf.js
当所有依赖项都安装完毕并且量角器开始运行时,出现此错误
我怎样才能 运行 我的测试在我的本地机器上成功完成?
默认情况下,Protractor 等待 angular 变量出现在网页中。它等待十秒的默认时间,然后超时。如果您的应用程序不是 angular 应用程序,您可以通过设置
将其关闭browser.waitForAngularEnabled(false);
在您的 describe
块中,在 it
部分之前。
PS - 如果上述方法不起作用,请在第一个 describe
块中尝试 browser.ignoreSynchronization = true;
,在 it
部分之前,这会使 Protractor 不等待 Angular promises.
为了在 bitbucket 管道上进行 e2e 测试,我必须对 bitbucket 进行一些更改-pipelines.yml、package.json 和 protractor.conf.js.
首先,bitbucket-pipelines.yml 看起来像这样。我们使用 adrianmarinica 提供的 docker 图像而不是默认节点图像。
# You can specify a custom docker image from Docker Hub as your build environment.
image: adrianmarinica/bitbucket-pipelines-protractor
pipelines:
branches:
master:
- step:
caches:
- node
script:
- npm install
- npm start
- protractor protractor.conf.js
然后,package.json看起来像这样
"scripts": {
...
"start": "ng serve &"
...
}
这里的关键变化是启动命令中的“&”。这将 运行 ng 在后台服务,允许触发量角器命令。
最后,对 protractor.conf.js
进行一些调整const { SpecReporter } = require('jasmine-spec-reporter');
exports.config = {
allScriptsTimeout: 1800000,
specs: [
'./e2e/**/*.e2e-spec.ts'
],
getPageTimeout: 120000,
capabilities: {
'browserName': 'chrome',
'chromeOptions': {
'args': [
'--no-sandbox',
'--disable-gpu'
]
}
},
useAllAngular2AppRoots: true,
directConnect: true,
baseUrl: 'http://localhost:4200/',
framework: 'jasmine',
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 120000,
print: function () { }
},
beforeLaunch: function () {
require('ts-node').register({
project: 'e2e/tsconfig.e2e.json'
});
},
onPrepare() {
jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
}
};
如果您的测试 运行 在本地成功,它们也应该在管道中,根据此配置,环境应该相同。
这只是我的示例:(非 AngularJS 应用程序)
内部来源:test_specs.js、conf.js、bitbucket.pipeline.yml
来源:(比特桶)test_spec.js
describe("Facebook App test", function(){
beforeEach(function(){
browser.driver.ignoreSynchronization = true;
});
it("should launch the browser", function(){
browser.driver.get("https://www.facebook.com");
console.log("Launch the browser");
}
});
---------------------------
Source: conf.js
exports.config = {
directConnect: true,
allScriptsTimeout: 20000,
capabilities: {
'browserName': 'chrome'
},
// Framework to use. Jasmine is recommended.
framework: 'jasmine',
// Spec patterns are relative to the current working directory when
// protractor is called.
specs: ['test_spec.js'],
// Options to be passed to Jasmine.
jasmineNodeOpts: {
//showColors: true,
defaultTimeoutInterval: 30000
}
};
-----------------------------
bitbucket.pipeline.yml ( **Is this correct?** )
pipelines:
branches:
master:
- step:
caches:
- node
script:
- npm install
- npm start
- protractor protractor.conf.js