Тестирование Node API с помощью Mocha и Chai
Мокко — это многофункциональная среда тестирования JavaScript, работающая на Node.js и в браузере, которая делает асинхронное тестирование простым и увлекательным.
it('two plus two is four', () => {
expect(2 + 2).to.equals(4);
});
it("adds 2 numbers", (done) => {
// perform asynchronous actions
// write tests done();
// call the done function after test.
});
Что такое Чай?
Чай — это библиотека утверждений BDD (разработка, управляемая поведением) / TDD (разработка, управляемая тестированием) для nodejs и браузера, которую можно прекрасно сочетать с любой средой тестирования javascript.
Типы утверждений
Chai имеет несколько интерфейсов, из которых разработчики могут выбирать. Они есть:
chai.should();
foo.should.be.a('string');
foo.should.equal('bar');
foo.should.have.lengthOf(3);
tea.should.have.property('flavors').with.lengthOf(3);
var expect = chai.expect;
expect(foo).to.be.a('string');
expect(foo).to.equal('bar');
expect(foo).to.have.lengthOf(3); expect(tea).to.have.property('flavors').with.lengthOf(3);
var assert = chai.assert;
assert.typeOf(foo, 'string');
assert.equal(foo, 'bar');
assert.lengthOf(foo, 3);
assert.property(tea, 'flavors');
assert.lengthOf(tea.flavors, 3);
Тест сервера
Теперь я хотел бы провести нас через процесс настройки базового Node API и написания тестов для него.
Прежде всего, создайте папку нашего проекта и инициализируйте ее с помощью npm, чтобы сгенерировать package.json
файл.
npm init -y
Установите зависимости, выполнив приведенные ниже команды на своем терминале.
npm i express --save
npm i mocha chai chai-http --save-dev
Сервер настройки
Создать app.js
в корне вашего проекта и добавьте приведенный ниже код, чтобы создать сервер с Express, а также с конечными точками, которые мы будем тестировать.
const express = require("express");
const app = express();
app.use(express.json());
app.get("/", (req, res) => {
res.json({ status: "success", message: "Welcome To Testing API" });
});
app.post("/add", (req, res) => {
const { num1, num2 } = req.body;
const add = (num1, num2) => {
return num1 + num2;
};
res.json({
status: "success",
result: "Welcome To Testing API",
result: add(num1, num2)
});
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.log(`App listening on port ${PORT}`));
module.exports = app;
Сценарии установки
Добавьте тестовый скрипт в package.json
файл.
"scripts": {
"test": "mocha"
}
Пишите тесты
Создайте тестовый каталог в своем проекте, а затем создайте app.test.js
файл внутри test
директория создана.
Примечание. Причина, по которой мы добавляем наши тесты в
test
directory заключается в том, что mocha по умолчанию ищет тестовый каталог в вашем проекте, хотя это можно настроить в соответствии с вашим стилем. Найди больше здесь
Затем добавьте код ниже
const app = require("../app");
const chai = require("chai");
const chaiHttp = require("chai-http");
const { expect } = chai;
chai.use(chaiHttp);
describe("Server!", () => {
it("welcomes user to the api", done => {
chai
.request(app)
.get("/")
.end((err, res) => {
expect(res).to.have.status(200);
expect(res.body.status).to.equals("success");
expect(res.body.message).to.equals("Welcome To Testing API");
done();
});
});
it("adds 2 numbers", done => {
chai
.request(app)
.post("/add")
.send({ num1: 5, num2: 5 })
.end((err, res) => {
expect(res).to.have.status(200);
expect(res.body.status).to.equals("success");
expect(res.body.result).to.equals(10);
done();
});
});
});
На этом этапе ваша структура папок должна выглядеть так, как показано на рисунке ниже.
Чтобы запустить тест, выполните приведенную ниже команду на своем терминале.
npm test
После запуска теста, если тест пройден, вы должны получить успешный ответ на своем терминале, как показано в примере ниже.
… и если тест не пройден, ответ об ошибке на вашем терминале, как показано в примере ниже
Найдите код, используемый в этом проекте, на Гитхаб
Найдите больше информации о Мокко здесь
Найдите больше информации о Чай здесь
Вывод
В этой статье мы рассмотрели настройку тестирования с помощью Mocha и Chai, а также написание тестов для нашего Node API. Я бы улучшил эту статью и проект по интеграции инструмента непрерывной интеграции под названием Travis-CI.
Если у вас есть какие-либо вопросы или отзывы об этой статье, не стесняйтесь оставлять комментарии.
Спасибо за чтение.