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
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.
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.
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.