resttestingjasminefrisby.js

Any way to ensure frisby.js test API calls go in sequential order?


I'm trying a simple sequence of tests on an API:

  1. Create a user resource with a POST
  2. Request the user resource with a GET
  3. Delete the user resource with a DELETE

I've a single frisby test spec file mytest_spec.js. I've broken the test into 3 discrete steps, each with their own toss() like:

    f1 = frisby.create("Create");
    f1.post(post_url, {user_id: 1});
    f1.expectStatus(201);
    f1.toss();

    // stuff...

    f2 = frisby.create("Get");
    f2.get(get_url);
    f2.expectStatus(200);
    f2.toss();

    //Stuff...

    f3 = frisby.create("delete");
    f3.get(delete_url);
    f3.expectStatus(200);
    f3.toss();

Pretty basic stuff, right. However, there is no guarantee they'll execute in order as far as I can tell as they're asynchronous, so I might get a 404 on test 2 or 3 if the user doesn't exist by the time they run.

Does anyone know the correct way to create sequential tests in Frisby?


Solution

  • As you correctly pointed out, Frisby.js is asynchronous. There are several approaches to force it to run more synchronously. The easiest but not the cleanest one is to use .after(() -> ... you can find more about after() in Fisby.js docs.