Параметр Supertest / Mocha done прошел в рамках тестов

Ниже приведен код, который я написал с помощью mocha, chai и supertest. У меня есть вопрос относительно того сегмента кода, который работает ниже, с упором на токен.

describe('Authenticated userTest', function () {
    var token;

    before(function loginAuth(done) {
        request(app)
            .post("/login/local")
            .send("username=testName")
            .send("password=qwe123QWE")
            .expect(function (res) {
                should.exist(res.body.token);
                token = res.body.token;
            })
            .end(done);
    });

    it('should give me a defined token', function(done) {
        console.log("token is " + token);
        done();
    });
});

Судя по всему, токен здесь определен хорошо и хорошо. Однако, когда я удаляю функцию done следующим образом:

describe('Authenticated userTest', function () {
    var token;

    before(function loginAuth() { //done is removed here
        request(app)
            .post("/login/local")
            .send("username=testName")
            .send("password=qwe123QWE")
            .expect(function (res) {
                should.exist(res.body.token);
                token = res.body.token;
            })
            .end(); //done is removed here
    });

    it('should give me a defined token', function(done) {
        console.log("token is " + token);
        done();
    });
});

Токен становится неопределенным. Насколько я понимаю, done - это функция, переданная от хука before ко всем последующим различным тестам, которая начинается с it(...) из встроенного исходного кода.

Таким образом, я хочу прояснить этот конкретный вопрос (если done передается только через тесты; if done принимает только параметр err) и почему токен стал неопределенным после удаления параметра done?

Спасибо.


person Luna    schedule 08.08.2016    source источник


Ответы (1)


Токен не стал неопределенным ... в момент, когда вы пытаетесь его использовать, он все еще не определен. token еще не установлен, потому что mocha не знает, что он работает с асинхронным тестом.

См. https://justinbellamy.com/testing-async-code-with-mocha/ < / а>

person Machtyn    schedule 10.08.2016