Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 带参数量角器测试上的循环_Loops_Testing_Jasmine_Protractor - Fatal编程技术网

Loops 带参数量角器测试上的循环

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

我有一套烟幕测试,它们几乎完全相同。我想把它们放到一个循环中,在一个参数数组中循环。但是,测试是异步运行的,因此循环在测试运行之前完成。这导致测试在第8个参数上运行8次,而不是每个参数运行一次

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
    });
});