Looping on a protractor test with parameters

后端 未结 3 1139
既然无缘
既然无缘 2020-11-28 08:41

I have a set of smokescreen tests that are all pretty much identical. I would like to put them into a loop and loop at an array of parameters. However, the tests are runni

相关标签:
3条回答
  • 2020-11-28 08:57

    Ok figured this one out a while ago, sorry I forgot I had posted here. We basically created a configuration array in another file, (though this is not necessary, just makes the code easier to read) and then pulled that array into a var right above the test we wanted to repeat. Then we surrounded the test in a function inside of a loop and passed the lines from our array in with each loop.

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

    The key here is that "testParams[i]" at the end of the function passing in the iteration of the loop. This forces synchronous execution.

    If you want to get really crazy we also ended up writing a batch file that runs this smokescreen about 50 times consecutively across all of our clients. We smokescreen our entire platform in about 10 minutes.

    0 讨论(0)
  • 2020-11-28 09:01

    With some asynchronous code, you can solve this quite easily.

    instead of running it('description', function () { // my test }); use it('description', function (done) { // my test with a call to done() at the end }

    You can use this snippet as an example :

    for (var i = 0; i < 10; i++) {
      it('should work for ' + i, function (done) {
        setTimeout(done, 1000);
      });
    }  
    

    The expected output :

    ✓ should work for 0 (1000ms)
    ✓ should work for 1 (1001ms)
    ✓ should work for 2 (1001ms)
    ✓ should work for 3 (1001ms)
    ✓ should work for 4 (1001ms)
    ✓ should work for 5 (1001ms)
    ✓ should work for 6 (1002ms)
    ✓ should work for 7 (1001ms)
    ✓ should work for 8 (1001ms)
    ✓ should work for 9 (1002ms)
    

    Hope this helps.

    0 讨论(0)
  • 2020-11-28 09:08

    You can also create an array with specs:

    var testParams = testConfig.testArray;
    
    testParams.forEach(function(testSpec) {
        it('write your test here', function() {
            //test code here
        });
    });
    

    This should work like the solution proposed by Robert McCraw.

    0 讨论(0)
提交回复
热议问题