有没有一个由角度生成器生成的AngularJS应用程序的例子,它有$httpBackend来自ngMockE2E模块的e2e测试?优选地,具有用于CI和开发的单个和连续版本.
看起来使用$ httpBackend需要一个创建一个依赖于原始应用程序模块和ngMockE2E模块的新应用程序,并需要新的index.html文件来加载这个新应用程序.
如果测试使用不同的应用程序,是否意味着我应该修改配置以存储为grunt server命令(.tmp)生成的文件以外的其他地方生成的文件,或者这些文件是否完全相同?我希望能够在使用PhantomJS在后台运行e2e测试时运行grunt服务器进行开发.
有没有人创建了一个基于index.html自动生成修改后的index-e2e.html文件的任务?这样它始终是最新的,它也可以与watch一起使用,以便在原始index.html文件更改时自动重新生成它.
尝试运行Protractor时,我在命令行中收到以下错误:
>致命错误:量角器退出代码:1
我需要代理到https测试服务器.我该如何做到这一点?我按照这个Github问题的建议,但我仍然得到上述错误.这是我的配置文件:
// A reference configuration file.
exports.config = {
// ----- How to setup Selenium -----
//
// There are three ways to specify how to use Selenium. Specify one of the
// following:
//
// 1. seleniumServerJar - to start Selenium Standalone locally.
// 2. seleniumAddress - to connect to a Selenium server which is already
// running.
// 3. sauceUser/sauceKey - to use remote Selenium servers via SauceLabs.
// The location of the selenium …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Protractor的addMockModule()来模拟一个简单的AngularJS模块并覆盖一个变量:
这是我的HTML:
<body ng-app="myApp">
<div ng-controller="myAppController">
Overriden module value <b>{{myValue}}</b>
</div>
<script src="/Scripts/Lib/angular/angular.js"></script>
<script src="/module.js"></script>
<script src="/controller.js"></script>
</body>
Run Code Online (Sandbox Code Playgroud)
这是我的控制器:
var myApp = angular.module("myApp", ['myModule']);
myApp.controller("myAppController", function ($scope, myValue) {
$scope.myValue = myValue;
});
Run Code Online (Sandbox Code Playgroud)
这是我的模块:
var newModule = angular.module('myModule', []);
newModule.value('myValue', "oldValue");
Run Code Online (Sandbox Code Playgroud)
这是我的Jasmine/Protractor代码:
var mockMyModule = function () {
var newModule = angular.module('myModule', []);
newModule.value('myValue', "newMockedValue");
};
it('should override services via mock modules', function () {
ptor = protractor.getInstance();
ptor.ignoreSynchronization = true;
browser.addMockModule('portfolioDataAccessMod', mockMyModule);
browser.get('http://localhost:57627/page1.html');
expect(element(by.binding("myValue")).getText()).toBe("newMockedValue");
});
Run Code Online (Sandbox Code Playgroud)
结果:
失败:
1)/ AssetAllocation/Index中的端到端测试应通过模拟模块覆盖服务消息:预期'oldValue'为'newMockedValue'. …
我需要为我的JavaScript单页面应用程序组织单元测试和端到端测试.我正在使用AngularJS Protractor/Cucumber进行e2e测试,使用Chai进行单元测试.
我有两个不同的文件夹(unit和e2e文件夹)中的e2e和单元测试,我目前没有利用页面对象设计模式.这些文件是非结构化的,不共享很多代码,所以我多次重复自己.
我认识到这种方法不会扩大规模
是否有最佳实践以这样的方式重新组织测试我编写最少量的代码,保持测试代码DRY?
如何在Jasmine和Protractor中使用Mock HTTP?
在我的test.spec.js中,我声明了一个模拟,但这个模拟不起作用.我没有任何错误.我的api总是回应,而不是模拟.
我从未见过'mockModule!' 在我的控制台中.我的功能永远不会执行:
browser.addMockModule('modName', function() {
browser.executeScript(function() {console.log('mockModule!')});
angular.module('modName', []).value('foo', 'bar').run(function ($httpBackend) {
$httpBackend.whenPOST('http://api.webapp.net/app_dev.php/module/search?direction=asc&page=1').respond('repsond');
browser.executeScript(function() {console.log('enter mockModule!')});
});
});
Run Code Online (Sandbox Code Playgroud)
在我的app.js中,我没有"ngMock".
我在index.html中添加了这个:
node_modules/angular-mocks/angular-mocks.js
Run Code Online (Sandbox Code Playgroud)
我使用'gulp protractor-local'从命令提示符运行测试:
gulp.task('protractor-local', shell.task([
'protractor protractor.conf.js --baseUrl="http://mywebapp.local.net"'
]));
Run Code Online (Sandbox Code Playgroud)
所有测试都没问题,但不是模拟.
test.spec.js
var loginPO = new(require('./models/login.model.js'))();
describe("hello", function() {
it("I click on the button-search button", function() {
loginPO.wait(10);
//browser.ignoreSynchronization = false;
browser.addMockModule('modName', function() {
browser.executeScript(function() {console.log('mockModule!')});
angular.module('modName', []).value('foo', 'bar').run(function ($httpBackend) {
$httpBackend.whenPOST('http://api.webapp.net/app_dev.php/module/search?direction=asc&page=1').respond('repsond');
browser.executeScript(function() {console.log('enter mockModule!')});
});
});
//browser.getRegisteredMockModules();
loginPO.clickButtonSearchButton();
loginPO.wait(10);
});
it("I am on the home …Run Code Online (Sandbox Code Playgroud) 我正在构建一个应用程序原型并尝试模拟REST Web服务.
这是我的代码:
var mock = angular.module('mock', ['ngMockE2E']);
mock.run(function($httpBackend){
users = [{id:1,name:'John'},{id:2,name:'Jack'}];
$httpBackend.whenGET('/users').respond(users);
$httpBackend.whenGET(new RegExp('\\/users\\/[0-9]+')).respond(users[0]);
}
Run Code Online (Sandbox Code Playgroud)
一切正常,我的资源User.query()返回所有用户,User.get({id:1})和User.get({id:2})返回相同的用户(John).
现在为了改进我的原型,我想返回适当的用户,匹配好的id.
我在角度文档中读到了我应该能够用函数替换RegExp URI.我们的想法是从url中提取id以在response方法中使用它.然后我尝试了这个:
$httpBackend.whenGET(new function(url){
alert(url);
var regexp = new RegExp('\\/users\\/([0-9]+)');
id = url.match(regexp)[1];
return regexp.test(url);
}).respond(users[id]);
Run Code Online (Sandbox Code Playgroud)
问题是url参数始终未定义.有什么想法实现我的目标?
我正在尝试将量角器与Jenkins结合使用.在我的jenkins中,我需要动态生成URL.
因此,在运行量角器测试时,例如:
describe('angularjs homepage', function() {
it('should greet the named user', function() {
// Load the AngularJS homepage.
browser.get('http://www.angularjs.org');
element(by.model('yourName')).sendKeys('testUser');
});
});
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我想动态地传递一个变量来代替" http://www.angularjs.org ".
我找不到任何可以在参考配置中指定的变量.
鉴于我有elmFinder变量:
var elmFinder = element(by.css('.thing'));
Run Code Online (Sandbox Code Playgroud)
如果我需要取回 webdriver.Locator,又名定位器策略怎么办?IE
elmFinder.??? //=> by.css('.thing')
Run Code Online (Sandbox Code Playgroud)
???如果它存在,我正在照顾这个功能。
更新:
此功能已合并,我们现在可以执行以下操作:
elmFinder.locator();
Run Code Online (Sandbox Code Playgroud) 正如标题所说 - (例如)之间存在差异
expect(element).isDisplayed().toBeTruthy();
Run Code Online (Sandbox Code Playgroud)
和
expect(element).isDisplayed().toBe(truth);
Run Code Online (Sandbox Code Playgroud)
如果有,那有什么区别?
谢谢
我一次运行多个测试服。目前我正在对数据进行硬编码以进行测试
例子
element(by.name('email')).sendKeys(xxxxxx)
element(by.name('password')).sendKeys('password')
Run Code Online (Sandbox Code Playgroud)
此电子邮件字段具有唯一键约束,因此每次运行测试时,我都必须手动更改此值。有很多这样的领域我需要改变,而且我很难手动完成。这在量角器 e2e 测试中通常是如何处理的。?
是否有任何可靠的第三方库或量角器中的任何选项来生成用于测试的模拟数据。所以每次它都会随机生成,就像我可以从库中获取姓名、有效的电子邮件字符串、电话号码、其他有意义的字符串等。
我正在使用带有 jasmine 的量角器对有角度的单页应用程序进行 e2e 测试。
任何帮助是极大的赞赏。
谢谢!
angularjs-e2e ×10
protractor ×8
angularjs ×7
jasmine ×2
assertions ×1
e2e-testing ×1
httpbackend ×1
javascript ×1
mocking ×1
unit-testing ×1
yeoman ×1