Mocha.js (читается как «мока») — это популярная библиотека для написания тестов backenda web приложений.
Установка
У вас стоит Node.js
Выполните в консоле
npm init npm install supertest npm install should npm install mocha -g
- supertest — для выполнения и тестирования запросов по http
- should — набор assert`тов для проверки различных результатов запроса к серверу
- mocha — сама библиотека тестирования. Явно ее можно не устанавливается т.к. она ставится с тем же should
Что будем тестировать
Для примера написал простенький сервер на Node.js отдающий в ответ данные которые ему поступили.
Запускаем его
node serverTest # или supervisor serverTest
Простой пример
Теперь выполним простейший тест проверяющий доступен ли вообще сервер
var supertest = require("supertest"); var server = supertest.agent("http://localhost:8080"); // Указали сервер к которому идет запрос // наборов тестов и его описание describe("Описание теста", function() { // Пошел сам тест. done - функция которая вызывается при успешном выполнение теста (тут неявно) it("Test #1", function(done) { server.get('/') .set('Accept', 'application/json') .expect(200, done) }); });
expect — проверяет код ответа сервера. Если кот отличается то экспешена не будет, но метод end (который обрабатывает окончание запроса) будет содержать ошибку
Запускаем
mocha testSimple
Получаем
Усложняем
var supertest = require("supertest"); var should = require("should"); var assert = require("assert"); var server = supertest.agent("http://localhost:8080"); describe("Проверка тестового сервера", function() { this.timeout(15000); // максимальный таймаут ответа сервера it("Test #1", function(done) { server .get('/test1') .expect(200) .end(function(err, res) { /** * Проверка как выполнился запрос. * Например реакция на неверный код ответа */ if (err) { assert(false, err.message); return; } done(); }); }); it("Test #2", function(done) { var values = { "val1": 123 }; server .post('/test2') .send(values) // Передача параметров .set('Accept', 'application/json') .expect(200) .end(function(err, res) { // Проверка тела ответа res.body.should.be.instanceof(Object); // тип тела res.body.method.should.equal("POST"); // значение поля method done(); }); }); });
- Test #1 — просто проверяет как выполнился запрос. Если мы поставим например expect(300) то выдаст ошибку
- Test #2 — выполняет POST запрос и проверяет пришедший ответ. Для проверки используется библиотека should.
Примеры утверждений задаваемых через should. Если утверждение не подтверждается то происходит исключение.
- test.should.be.instanceof(Object) — test является объектом
- test.should.be.instanceof(String) — test является строкой
- test.should.be.instanceof(Number) — test является цифрой
- test.should.have.property(«test1») — у test есть свойство с именем «test1»
- test.should.have.property(«test1», «value») — у test есть свойство с именем «test1» и оно равно «value»
- test.should.be.ok() — test имеет положительное значение (например не null)
- test.should.not.be.ok() — test имеет отрицательное значение (например равен null)
- test.should.equal(«test1») — test равен «test1»
- test.should.not.equal(«test1») — test НЕ равен «test1»