Модульный тест API с использованием chai дает неверный результат

Я пишу модульный тест для своего API, который использует nodejs и mongoose. Я использую mocha, chai и chai-http для модульного тестирования.

Я тестирую запрос POST, который создает клиента. Первый тест создает клиента, и он проходит. Последний тест попытается создать клиента, но должен завершиться ошибкой, поскольку электронное письмо уже существует, но это не удастся, поскольку запрос создает нового клиента.

Я пытался выполнять запросы вручную с помощью почтальона, и это дает правильное поведение.

Вот тесты:

describe('Customer', () => {

//Before each test we empty the database
beforeEach((done) => {
    Customer.remove({}, (err) => {
        done();
    });
});

// Creating Customer test
describe('POST Account - Creating customer account', () => {

    it('creating a user with correct arguments', (done) => {

        // defining the body
        var body = {
            first_name : "Abdulrahman",
            last_name : "Alfayad",
            email: "[email protected]",
            password: "123"
        };

        chai.request(server)
        .post('/api/customer/account')
        .send(body).end((err, res) => {
            res.body.should.have.property('status').and.is.equal('success');
            res.body.should.have.property('message').and.is.equal('customer was created');
            done();
        });
    });

    it('creating a user with incorrect arguments', (done) => {

        // defining the body
        var body = {
            first_name: "Abdulrahman",
            email: "[email protected]",
        };

        chai.request(server)
            .post('/api/customer/account')
            .send(body).end((err, res) => {
                res.body.should.have.property('status').and.is.equal('failure');
                res.body.should.have.property('message').and.is.equal('no arguments were passed');
                done();
            });
    });

    it('creating a user with an already existing email in the DB', (done) => {

        // defining the body
        var body = {
            first_name: "Abdulrahman",
            last_name: "Alfayad",
            email: "[email protected]",
            password: "123"
        };

        chai.request(server)
            .post('/api/customer/account')
            .send(body).end((err, res) => {
                res.body.should.have.property('status').and.is.equal('failure');
                res.body.should.have.property('message').and.is.equal('email already exist');
                done();
            });
    });

});

});


person Fayad    schedule 21.09.2018    source источник
comment
Итак, какой результат на самом деле возвращается с сервера? Выполняете ли вы какую-либо очистку пользователей за тест?   -  person James    schedule 22.09.2018
comment
да, я отредактировал фрагмент кода, чтобы дать вам лучшее представление   -  person Fayad    schedule 22.09.2018


Ответы (1)


Я чувствую, что это потому, что вы используете beforeEach для очистки базы данных клиентов. beforeEach ловушка будет выполняться перед каждым тестом, поэтому, когда вы запускали тест сценария электронной почты, ваша база данных фактически была пустой.

Самый простой способ решить эту проблему — снова создать нового клиента перед существующим сценарием электронной почты, например:

it('creating a user with an already existing email in the DB', (done) => {

  // NOTE: Create a user with email "[email protected]"

  // defining the body
  var body = {
    first_name: "Abdulrahman",
    last_name: "Alfayad",
    email: "[email protected]",
    password: "123"
  };

  chai.request(server)
    .post('/api/customer/account')
    .send(body).end((err, res) => {
      res.body.should.have.property('status').and.is.equal('failure');
      res.body.should.have.property('message').and.is.equal('email already exist');
      done();
    });
});

Надеюсь, что это работает

person deerawan    schedule 21.09.2018
comment
Спасибо, это работает, я создал клиента, затем попытался создать еще одного, и это дало мне правильный результат. - person Fayad; 22.09.2018
comment
@Фаяд круто ???????? - person deerawan; 23.09.2018