测试中传递的Supertest / mocha完成参数

时间:2016-08-08 13:28:56

标签: node.js mocha chai supertest

下面是我用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(...)开始。

因此,我想澄清一下这个特定问题(如果只在测试中传递完成;如果完成只接受err参数),为什么在删除done参数后该标记变为未定义?

谢谢。

1 个答案:

答案 0 :(得分:1)

Token没有变得未定义......在您尝试使用它时,仍然未定义。 token尚未设置,因为mocha不知道它正在使用异步测试。

请参阅https://justinbellamy.com/testing-async-code-with-mocha/