Loops 带参数量角器测试上的循环
我有一套烟幕测试,它们几乎完全相同。我想把它们放到一个循环中,在一个参数数组中循环。但是,测试是异步运行的,因此循环在测试运行之前完成。这导致测试在第8个参数上运行8次,而不是每个参数运行一次Loops 带参数量角器测试上的循环,loops,testing,jasmine,protractor,Loops,Testing,Jasmine,Protractor,我有一套烟幕测试,它们几乎完全相同。我想把它们放到一个循环中,在一个参数数组中循环。但是,测试是异步运行的,因此循环在测试运行之前完成。这导致测试在第8个参数上运行8次,而不是每个参数运行一次 describe('Admin Console Campaigns', function() { var ptor; var adminUrl; var testParams = [ {title: 'Dashboard', urlSuffix: '/communi
describe('Admin Console Campaigns', function() {
var ptor;
var adminUrl;
var testParams = [
{title: 'Dashboard', urlSuffix: '/communic8' },
{title: 'Campaign Report', urlSuffix: '/Reports/Campaign' },
{title: 'Partner Campaign Usage', urlSuffix: '/Reporting/PartnerCampaignUsage' },
{title: 'Campaign Template Usage', urlSuffix: '/Reporting/CampaignTemplateUsage' },
{title: 'Email Usage Report', urlSuffix: '/Reports/EmailUsage' },
{title: 'Campaign Templates', urlSuffix: '/CampaignTemplates' },
{title: 'Campaign Template Groups', urlSuffix: '/CampaignTemplateGroups' },
{title: 'New Template', urlSuffix: '/CampaignTemplates/Add' }
];
beforeEach(function() {
ptor = protractor.getInstance();
ptor.ignoreSynchronization = true;
var testParams = smokescreenTestConfig.adminCampaigns;
adminUrl = ptor.params.http + ptor.params.client + ptor.params.staging + ptor.params.sharedvue + ptor.params.admin;
});
afterEach(function(){
});
for(var i=0; i < testParams.length; i++){
var testParam = testParams[i];
it('should have a ' + testParam.title + ' tab', function() {
testUrl = adminUrl + testParam.urlSuffix;
basicTestFunctions.pageExists(testUrl, ptor, browser, testParam.title);
}, 60000);
};
});
description('管理控制台活动',函数()){
变阻器;
var-adminUrl;
var testParams=[
{title:'Dashboard',urlSuffix:'/communic8'},
{title:'Campaign Report',urlSuffix:'/Reports/Campaign'},
{title:'合作伙伴活动用途',urlSuffix:'/Reporting/PartnerCampaignUsage'},
{title:'Campaign Template Usage',urlSuffix:'/Reporting/Campaign templateusage'},
{title:'Email Usage Report',urlSuffix:'/Reports/EmailUsage'},
{title:'Campaign Templates',urlSuffix:'/Campaign Templates'},
{title:'Campaign Template Groups',urlSuffix:'/Campaign templategroups'},
{title:'New Template',urlSuffix:'/campaittemplates/Add'}
];
beforeach(函数(){
ptor=量角器.getInstance();
ptor.ignoreSynchronization=true;
var testParams=smokescreenTestConfig.adminCampaigns;
adminUrl=ptor.params.http+ptor.params.client+ptor.params.staging+ptor.params.sharedvue+ptor.params.admin;
});
之后(函数(){
});
对于(var i=0;i
有人知道如何强制循环等待测试吗?使用一些异步代码,您可以很容易地解决这个问题 而不是运行
it('description',function(){//my test})代码>使用it('description',function(done){//my test,最后调用done()}
您可以将此代码段用作示例:
for (var i = 0; i < 10; i++) {
it('should work for ' + i, function (done) {
setTimeout(done, 1000);
});
}
希望这能有所帮助。好的,我刚才已经解决了这个问题,很抱歉我忘了在这里发布。我们基本上在另一个文件中创建了一个配置数组(虽然这不是必需的,只是让代码更容易阅读)然后将该数组拉入我们要重复的测试正上方的一个变量中,然后将该测试包围在一个循环内的函数中,并将数组中的行与每个循环一起传递
var testParams = testConfig.testArray;
for (var i = 0; i < testParams.length; i++) {
(function (testSpec) {
it('write your test here', function () {
//test code here
});
})(testParams[i]);
};
var testParams=testConfig.testArray;
对于(var i=0;i
这里的关键是在循环迭代中传递的函数末尾的“testParams[i]”,这强制同步执行
如果你真的想发疯,我们还编写了一个批处理文件,在所有客户机上连续运行此烟幕大约50次。我们在大约10分钟内烟幕屏蔽了整个平台。你还可以创建一个具有规格的阵列:
var testParams = testConfig.testArray;
testParams.forEach(function(testSpec) {
it('write your test here', function() {
//test code here
});
});
这应该与Robert McCraw提出的解决方案类似。此解决方案会抛出错误“不要在WebDriverJS测试中使用已完成的回调”。有什么想法吗?恐怕没有,你能发布一些代码吗?(最好是在另一个问题上)在角度量角器测试中,如果我使用done回调和setTimeout粘贴您的确切的for…
示例,测试错误将被清除,控制台将显示`/node\u modules/pregrator/jasminewd/index.js:44抛出新错误('Don't use done callback with WebDriverJS tests^错误:Don't use done callback with WebDriverJS tests。这些测试被修补为异步测试,并将在webdriver控制流为空时终止。'OK,我将尝试使用jasmine(可能使用mocha运行此代码段)如果我找到了方法,请报告。如果你没有检查,我们在上面已经解决了。我遇到了这个确切的问题。你找到解决方案了吗?是的,刚刚写了一份答案。应该在一段时间前完成。谢谢你回来更新这个。这个解决方案对我有效!说循环有更多的it()
blocks。是否有办法根据第一个it()中的条件继续;
到下一个迭代(跳过其他it()
块)
block?我无法调用continue-语法错误:非法continue语句
Chutzpah或Karma是否识别这些测试用例?我可以在SpecRunner.html中使其工作,但Chutzpah/Karma无法识别..有任何注释吗?为什么.map()
和否.forEach()
?@DanielKucal结果没有差别,尽管使用forEach()
可能更适合这种情况,因为您只想循环,而不希望构建结果数组。
var testParams = testConfig.testArray;
testParams.forEach(function(testSpec) {
it('write your test here', function() {
//test code here
});
});