Api test automation with mocha and chai
Mocha is a JavaScript test framework running on Node.js and in the browser, which can be used for unit testing, and api and ui automated testing, here we will use it along with chai to do some api automated testing in nodejs with typescript.
Packages
We will install packages below with yarn add or npm install
- @types/chai-http
- @types/mocha
- @types/node
- chai
- chai-http
- mocha
- mochawesome
- ts-mocha
- ts-node
- typescript
- typings
Writing tests
Mocha BDD interface will be used to create the test case. chai-http
describe('test get findByStatus', () => {
it(`should succeed when findByStatus`, (done) => {
chai.request(baseUrl)
.get('/v2/pet/findByStatus')
.query({status:'available'})
.end(function(err,res){
expect(res).to.have.status(200);
expect(res.body).to.to.have.length(432);
done();
});
}).timeout(30000);
});
describe('test get findByStatus', () => {
it(`should succeed when findByStatus-async`, async () => {
const res = await chai.request(baseUrl)
.get('/v2/pet/findByStatus')
.query({status:'available'});
expect(res).to.have.status(200);
expect(res.body).to.to.have.length(4320);
}).timeout(30000);
});
Data driven
We have created one test case, but we have some more status to check, so let’s make it data driven.
describe('test get findByStatus', () => {
var tests : {status:string, expectedCount: number } [] = [
{status:"available", expectedCount:1000},
{status:"pending", expectedCount:300},
{status:"sold", expectedCount:500}
];
tests.forEach(function(test)
{
it(`should succeed when findByStatus - ${test.status}`, async () => {
const res = await chai.request(baseUrl)
.get('/v2/pet/findByStatus')
.query({status:'available'});
expect(res).to.have.status(200);
expect(res.body).to.to.have.length(test.expectedCount);
}).timeout(30000);
});
});
Execution and reporting
//Add content below in the scripts section of package.json
"test": "ts-mocha --file src/test/tw.test.ts",
"test:report": "ts-mocha --reporter mochawesome --file src/test/tw.test.ts"