Модульное тестирование с использованием Mocha с Express Rest API - PullRequest
0 голосов
/ 02 июля 2018

Я изучаю юнит-тестирование. До сих пор мне удавалось запускать простые тесты, такие как «Добавить два числа и проверить, не превышают ли они 0», но я хочу создать REST API с использованием TDD. Пока у меня есть это:

Мой routes/index.js файл:

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function (req, res, next) {
    res.send({val: true});
});

module.exports = router;

Мой index.test.js файл:

var mocha = require('mocha');
var assert = require('chai').assert;
var index = require('../routes/index');

describe('Index methods', () => {
    it('Returns true', done => {
        index
            .get('http://localhost:3000')
            .end(function (res) {
                expect(res.status).to.equal(200);
                done();
            })
    })
});

Я использую учебник, чтобы сделать это, но когда я пытаюсь запустить это, я получаю:

TypeError: index.get(...).end is not a function

Так что я предполагаю, что что-то не так, но понятия не имею, что. Это мой первый день обучения TDD, поэтому, если вы видите что-то глупое, пожалуйста, дайте мне знать.

Делаем это:

it('Returns true', done => {
    var resp = index.get('http://localhost:3000/');
    assert.equal(resp.val === true);
    done();
})

Также приводит к ошибке:

AssertionError: expected false to equal undefined

Ответы [ 3 ]

0 голосов
/ 02 июля 2018
var mocha = require('mocha');
var assert = require('chai').assert;
var index = require('./index');
var req = require('supertest');

describe('Index methods', () => {
    it('Returns true', done => {
        req(index)
            .get('/')
            .end(function (res) {
                expect(res.status).to.equal(200);
                done();
            })
    })
});

также в вашем терминале типа npm i supertest --save-dev

0 голосов
/ 02 июля 2018

1. Установите dev-зависимости для mocha

  • chai : библиотека утверждений для узла и браузера,
  • chai-http : утверждения HTTP-ответа для библиотеки утверждений Chai.

2. Вам нужно экспортировать свой сервер,

'use strict';
/*eslint no-console: ["error", { allow: ["warn", "error", "log"] }] */
const express = require('express');
const app = express();
//...
const config = require('config');

const port = process.env.PORT || config.PORT || 3000;

//....
app.listen(port);
console.log('Listening on port ' + port);

module.exports = app;

3. Напишите ваши тесты как:

Если ваш тестовый скрипт users.spec.js , он должен начинаться с:

// During the rest the en variable is set to test
/* global describe it beforeEach */
process.env.NODE_ENV = 'test';

const User = require('../app/models/user');

// Require the dev-dependencies
const chai = require('chai');
const chaiHttp = require('chai-http');

// You need to import your server
const server = require('../server');

const should = chai.should();
// Set up the chai Http assertion library
chai.use(chaiHttp);

// Your tests
describe('Users', () => {
    beforeEach((done) => {
        User.remove({}, (err) => {
            done();
        });
    });
    
    /**
     * Test the GET /api/users
     */
    describe('GET /api/users', () => {
        it('it should GET all the users', (done) => {
            chai.request(server)
                .get('/api/users')
                .end((err, res) => {
                    res.should.have.status(200);
                    res.body.should.be.a('array');
                    res.body.length.should.be.eql(0);
                    done();
                });
        });
    });
    // More test...
});

Вы можете взглянуть на мой репозиторий, Github - REST API книжного магазина

0 голосов
/ 02 июля 2018
const chai = require('chai');
const expect = require('chai').expect;
const chaiHttp = require('chai-http');
chai.use(chaiHttp);    

первая установка чай

it('Returns true', done => {
            return chai.request(index)
                .get('/')
                .then(function (res) {
                    expect(res.status).to.equal(200);
                    done();
                })
        })
...