vlucas / frisby

Frisby is a REST API testing framework built on Jest that makes testing API endpoints easy, fast, and fun.
http://frisbyjs.com
1.53k stars 201 forks source link

Iterate through multiple get calls. #559

Open bora19 opened 4 years ago

bora19 commented 4 years ago

Im trying to iterate through multiple devices and getting the response from each device. But since frisby requires return to work then I cannot use it in a for loop.

Is there any way to loop through multiple devices.

ex. device 123456 gets a response then I grab that response and save it in a text file then I want to continue looping through the rest of the devices and save the response on text file.

basic form: for (i = 0; i < foo.length; i++) {
return frisby.get(baseUrl + foo[i]+ endPoint) .then(function (res) { console.log('HERE'); }); }

The above will only process the 1st iteration due to the required return. Is there a way to bypass it?

H1Gdev commented 4 years ago

use Promise.all().

sample code:

const frisby = require('frisby');

it('issue 559.', () => {
    let f = id => {
      return frisby.get(baseUrl + id + endPoint)
        .then(res => {
          console.log('HERE');
        });
    };
    let p = Array(5);
    for (let i = 0; i < p.length; ++i)
      p[i] = f(i);

    return Promise.all(p);
});
bora19 commented 4 years ago

Using promise.all works but I keep getting random error 504 gateway timeouts. It will not complete my test list of 8 items without an error 504. I usually get anywhere from 3-4 results back. Every time I run a different result will come back

H1Gdev commented 4 years ago

Test time may be insufficient.

https://github.com/vlucas/frisby/issues/515#issuecomment-458000926