我正在尝试测试我的应用程序,我需要将一个小部件从一个位置移动到另一个位置,换句话说,我需要在端到端测试中测试拖放功能.
我该如何测试?
所以我听说过单元和集成测试,但我最近听说过中途测试.似乎该术语最常用于AngularJS上下文中.谷歌查询提供的主题信息非常少.我对中途测试的问题是:
javascript integration-testing unit-testing angularjs angularjs-e2e
我有一个双滑块,我想测试它是否可操作并返回正确的数据.滑块有一个min和max处理程序,它还有一些"我可以挂钩的断点".
我想要模拟的是
而我发现了如何触发touchStart和touchEnd事件.我对如何模拟拇指的移动毫无头绪
browser.executeScript('angular.element(arguments[0]).triggerHandler("touchstart");', filterHandler);
// <--- move event????
browser.executeScript('angular.element(arguments[0]).triggerHandler("touchend");', filterHandler);
Run Code Online (Sandbox Code Playgroud)
PS这个问题的范围是一个集成测试,它测试当用户与双滑块指令交互时应用程序发生了什么是理想的结果.
我试图让e2e测试在下一个例子上工作:
HTML:
<div ng-if="selectedItem">
<span class-"xxx">This is line 1</span>
<span class="xxx yyy">This is line 2</span>
</div>
Run Code Online (Sandbox Code Playgroud)
量角器:
..
element.findByCss('div[ng-if="selectedItem"] span[class!="yyy"]');
..
Run Code Online (Sandbox Code Playgroud)
给出以下错误:
失败:无效的元素状态:无法在'Document'上执行'querySelectorAll':'div [ng-if ="selectedItem"] span [class!="yyy"]'不是有效的选择器.
选择器使用jQuery虽然..我知道它不一样.但我似乎无法找到如何用量角器排除一个类
我的e2e.conf.coffee档案是:
exports.config =
baseUrl: 'http://localhost:9001'
specs: [
'e2e/**/*.coffee'
]
framework: 'jasmine'
Run Code Online (Sandbox Code Playgroud)
我让我的节点项目运行并在端口9001上侦听.
我的测试是:
describe 'Happy Path', ->
it 'should show the login page', ->
console.log browser
expect(browser.getLocationAbsUrl()).toMatch("/view1");
it 'should fail to login', ->
setTimeout ->
console.log "FAIL!"
, 1200
Run Code Online (Sandbox Code Playgroud)
而我得到的错误是:
Failures:
1) Happy Path should show the login page
Message:
Error: Error while waiting for Protractor to sync with the page: {}
Stacktrace:
Error: Error while waiting for Protractor to sync with the page: {}
at <anonymous>
at …Run Code Online (Sandbox Code Playgroud) 我使用Protractor和Jasmine作为我的移动Angularjs应用程序.我想在特定元素上测试触摸事件(touchStart/touchEnd等...).就像是:
it('should play video', function(){
var poster = by.css('.video-poster');
element(poster).??? //Simulate touch event here
});
Run Code Online (Sandbox Code Playgroud) 这个问题是我的另一个问题的可能解决方案(他们建议使用addMockModule量角器):使用Protractor运行测试时调用其他api.
我有以下文件:mockedRest.js这是我要添加到量角器的模块.它应该拦截任何REST调用并替换地址(api /到apiMock /).
exports.apiMockModule = function () {
console.log('apiMockModule executing');
var serviceId = 'mockedApiInterceptor';
angular.module('apiMockModule', ['myApp'])
.config(['$httpProvider', configApiMock])
.factory(serviceId,
[mockedApiInterceptor]);
function mockedApiInterceptor() {
return {
request: function (config) {
console.log('apiMockModule intercepted');
if ((config.url.indexOf('api')) > -1) {
config.url.replace('api/', 'apiMock/');
}
return config;
},
response: function (response) {
return response
}
};
}
function configApiMock($httpProvider) {
$httpProvider.interceptors.push('mockedApiInterceptor');
}
};
Run Code Online (Sandbox Code Playgroud)
然后我在实际测试中加载模块.
describe('E2E addMockModule', function() {
beforeEach(function() {
var mockModule = require('./mockedRest');
browser.addMockModule('apiMockModule', mockModule.apiMockModule);
console.log('apiMockModule loaded');
browser.get('#page'); …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用量角器进行角度应用的E2E测试.我使用该命令./node_modules/protractor/bin/webdriver-manager启动我的selenium服务器.但是,默认的selenium服务器位置是localhost:4444/wd/hub,但localhost:4444已经在我的机器上使用,这很难改变.如何在4444以外的端口启动selenium服务器?
由于关于GitLab CI配置和Selenium的文档通常很差,我正在寻求帮助.
按兴趣点配置:
gitlab.ci.yml:
image: node:7
variables:
HUB_PORT_4444_TCP_ADDR: "selenium__hub"
HUB_PORT_4444_TCP_PORT: "4444"
services:
- selenium/hub:latest
- selenium/node-phantomjs:latest
stages:
- test
test:
stage: test
before_script:
- apt-get update
- apt-get install -y default-jdk default-jre
- npm install -s -g @angular/cli@1.0.6
- npm install -s
- node ./node_modules/protractor/bin/webdriver-manager update
script:
- ./node_modules/.bin/protractor protractor.ci.conf.js
Run Code Online (Sandbox Code Playgroud)
protractor.ci.conf.js:
/*global jasmine */
const { SpecReporter } = require('jasmine-spec-reporter');
exports.config = {
allScriptsTimeout: 11000,
specs: [
'./e2e/**/*.e2e-spec.ts'
],
capabilities: {
'browserName': 'phantomjs',
'phantomjs.binary.path': './node_modules/phantomjs-prebuilt/bin/phantomjs'
},
directConnect: false, …Run Code Online (Sandbox Code Playgroud) 我用Protractor测试我的角度应用程序.一旦用户登录到我的应用程序,我设置$ timeout以在一小时内完成某项工作(因此,如果用户在13:00登录,则$ timeout将在14:00运行).我一直遇到这些失败:
"Timed out waiting for Protractor to synchronize with the page after 20 seconds. Please see https://github.com/angular/protractor/blob/master/docs/faq.md. The following tasks were pending: - $timeout: function onTimeoutDone(){....."
Run Code Online (Sandbox Code Playgroud)
我已经阅读了这个超时页面:https://github.com/angular/protractor/blob/master/docs/timeouts.md 所以我理解量角器等待页面完全加载,这意味着他正在等待$ timeout完成...
如何让Protractor不等待$ timeout?我不想用:
browser.ignoreSynchronization = true;
Run Code Online (Sandbox Code Playgroud)
因为那时我的测试会因其他原因而失败(其他角度组件仍然需要加载的时间......)
angularjs-e2e ×10
protractor ×9
angularjs ×8
javascript ×3
selenium ×2
gitlab-ci ×1
jasmine ×1
testing ×1
unit-testing ×1