Files
freeCodeCamp/curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-an-api-response-using-chai-http-iv---put-method.md
Kristofer Koishigawa 361fba686e fix: update mocha chai challenge text, code snippets (#43065)
* fix: update mocha chai challenge text, code snippets

* fix: add expected output values to instructions

* fix: reword instructions a little bit

* fix: adjust challenge test for new test suite in boilerpplate

Co-authored-by: moT01 <20648924+moT01@users.noreply.github.com>
2021-08-10 09:45:12 -07:00

3.4 KiB

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
587d824f367417b2b2512c5b Run Functional Tests on an API Response using Chai-HTTP IV - PUT method 2 301591 run-functional-tests-on-an-api-response-using-chai-http-iv---put-method

--description--

As a reminder, this project is being built upon the following starter project on Replit, or cloned from GitHub.

This exercise is similar to the previous one.

Now that you know how to test a PUT request, it's your turn to do it from scratch.

--instructions--

Within tests/2_functional-tests.js, alter the 'Send {surname: "da Verrazzano"}' test (// #4) and use the put and send methods to test the '/travellers' endpoint.

Send the following JSON object with your PUT request:

{
  "surname": "da Verrazzano"
}

Check for the following within the request.end callback:

  1. The status should be 200
  2. The type should be application/json
  3. The body.name should be Giovanni
  4. The body.surname should be da Verrazzano

Follow the assertion order above - we rely on it. Also, be sure to remove assert.fail() once complete.

--hints--

All tests should pass

(getUserInput) =>
  $.get(getUserInput('url') + '/_api/get-tests?type=functional&n=3').then(
    (data) => {
      assert.equal(data.state, 'passed');
    },
    (xhr) => {
      throw new Error(xhr.responseText);
    }
  );

You should test for res.status to be 200

(getUserInput) =>
  $.get(getUserInput('url') + '/_api/get-tests?type=functional&n=3').then(
    (data) => {
      assert.equal(data.assertions[0].method, 'equal');
      assert.equal(data.assertions[0].args[0], 'res.status');
      assert.equal(data.assertions[0].args[1], '200');
    },
    (xhr) => {
      throw new Error(xhr.responseText);
    }
  );

You should test for res.type to be 'application/json'

(getUserInput) =>
  $.get(getUserInput('url') + '/_api/get-tests?type=functional&n=3').then(
    (data) => {
      assert.equal(data.assertions[1].method, 'equal');
      assert.equal(data.assertions[1].args[0], 'res.type');
      assert.match(data.assertions[1].args[1], /('|")application\/json\1/);
    },
    (xhr) => {
      throw new Error(xhr.responseText);
    }
  );

You should test for res.body.name to be 'Giovanni'

(getUserInput) =>
  $.get(getUserInput('url') + '/_api/get-tests?type=functional&n=3').then(
    (data) => {
      assert.equal(data.assertions[2].method, 'equal');
      assert.equal(data.assertions[2].args[0], 'res.body.name');
      assert.match(data.assertions[2].args[1], /('|")Giovanni\1/);
    },
    (xhr) => {
      throw new Error(xhr.responseText);
    }
  );

You should test for res.body.surname to be 'da Verrazzano'

(getUserInput) =>
  $.get(getUserInput('url') + '/_api/get-tests?type=functional&n=3').then(
    (data) => {
      assert.equal(data.assertions[3].method, 'equal');
      assert.equal(data.assertions[3].args[0], 'res.body.surname');
      assert.match(data.assertions[3].args[1], /('|")da Verrazzano\1/);
    },
    (xhr) => {
      throw new Error(xhr.responseText);
    }
  );

--solutions--

/**
  Backend challenges don't need solutions, 
  because they would need to be tested against a full working project. 
  Please check our contributing guidelines to learn more.
*/