Your test automation code is an important tool to evaluate your application. You must ensure your test code is working/testing as you want it to be. the automated tests give confidence for the developer that the application behaves as expected and things are not broken after they change the code.
Recently, at our QA phase, the QA found a bug that should have been caught from our test automation. Therefore being suspicious I looked into the code. Interesting enough, the way we used loops along with test blocks were not testing as we wanted. Below is an example of a test block with the bad approach we had. Then I listed down a working approach using loops.
describe('Bad Spec', function () { for (var i = 0; i < 3; i++) { console.log('Iteration value outside test: ' + i); it ('bar', function() { console.log('Test is evaluated. Iteration value inside test: ' + i); expect(true).toEqual(true) }); } });
The following is the console output. Notice that the value inside the test block is always the same value.
Iteration value outside test: 0 Iteration value outside test: 1 Iteration value outside test: 2 Test is evaluated. Iteration value inside test: 3 Test is evaluated. Iteration value inside test: 3 Test is evaluated. Iteration value inside test: 3
Here a solution is to use a function
describe('Good Spec', function () { function goodRunner(itemValue) { it ('foo', function() { console.log('Test is evaluated. Iteration value inside test: ' + itemValue); expect(true).toEqual(true) }); } for (var i = 0; i < 3; i++) { console.log('Iteration value outside test: ' + i); goodRunner(i); } });
Now the output looks as follows.
Iteration value outside test: 0 Iteration value outside test: 1 Iteration value outside test: 2 Test is evaluated. Iteration value inside test: 0 Test is evaluated. Iteration value inside test: 1 Test is evaluated. Iteration value inside test: 2
For me it is not working.Please help
Please be more specific.
Works well with above approach
HI…
I am new to protractor.
I want to import excel values(from 6 rows) and to call same login function using for() loop. When i use , it() block inside function, function is called. but it() block doesnt executed.
it should work fine if you use an arrow function “it (‘bar’, () => {…” instead of using “it (‘bar’, function() {…”
Also, should work if we change the var to let in the for loop sue to block scoping.