Перейти к содержанию

Организация тестов и метод describe

В процессе разработки у нас может быть множество модулей, и для каждого может быть определено несколько тестов. С помощью метода describe(), который определен в mocha.js, можно оформить тесты в связанные группы. Например, тесты по одному модулю будут составлять одну группу, а тесты другого модуля будут оформлять соответственно другую группу. Разбиение на группы позволит легко идентифицировать, для какого модуля или группы не прошел тест, особенно если тестов очень много.

Например, пусть в проекте будет модуль operations.js:

1
2
3
4
5
6
module.exports.multiply = function (x, y) {
    return x * y;
};
module.exports.add = function (x, y) {
    return x + y;
};

Для этого модуля определим файл тестов operations.test.js:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
var assert = require('assert');
var operations = require('./operations');

describe('Operation Tests', function () {
    it('should multiply two numbers', function () {
        var expected = 15;
        var result = operations.multiply(3, 5);
        assert.equal(result, expected);
    });
    it('should add two numbers', function () {
        var expected = 16;
        var result = operations.add(9, 7);
        assert.equal(result, expected);
    });
});

В метод describe() в качестве первого параметра передается описание тестов, а в качестве второго - функция, которая содержит тесты.

Также пусть в проекте будет файл app.js:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
const express = require('express');
var app = express();

app.get('/', function (request, response) {
    response.send('Hello Test');
});

app.get('/error', function (request, response) {
    response.status(404).send('NotFound');
});

app.get('/user', function (request, response) {
    response.send({ name: 'Tom', age: 22 });
});

app.listen(3000);

module.exports.app = app;

Для него определим файл тестов app.test.js:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
const request = require('supertest');
const assert = require('assert');

var app = require('./app').app;

describe('Express Tests', function () {
    it('should return Hello Test', function (done) {
        request(app)
            .get('/')
            .expect('Hello Test')
            .end(done);
    });

    it('should return NotFound with status 404', function (done) {
        request(app)
            .get('/error')
            .expect(404)
            .expect('NotFound')
            .end(done);
    });

    it('should return user with name Tom and age 22', function (done) {
        request(app)
            .get('/user')
            .expect(function (response) {
                assert.deepEqual(response.body, {
                    name: 'Tom',
                    age: 22,
                });
            })
            .end(done);
    });
});

Здесь метод describe оформляет вторую группу.

Запустим тесты:

5.8.png