代码之家  ›  专栏  ›  技术社区  ›  o01

Supertest中“done()”的用途/性质是什么?

  •  0
  • o01  · 技术社区  · 6 年前

    documentation of Supertest 有一些代码示例,其中回调函数调用 done() 传递给:

    describe('GET /user', function() {
      it('responds with json', function(done) {
        request(app)
          .get('/user')
          .set('Accept', 'application/json')
          .expect('Content-Type', /json/)
          .expect(200, done);
      });
    });
    

    完成() 回叫?

    1 回复  |  直到 6 年前
        1
  •  2
  •   sezanzeb    6 年前

    您的请求是异步的。

    这意味着,除非您能够等待它,否则从第2行开始的函数将立即退出。然后,Mocha将继续进行其他测试,然后突然,请求承诺将实现并完成一些事情,而Mocha甚至不再查看您的“responsewithjson”规范。

    您尝试实现的行为是执行请求,等待响应,然后测试响应是否为200。

    有3种方法等待响应:

    通过将done放入函数(done)调用中,测试框架知道它应该等到done被调用之后才能完成测试。

    https://github.com/visionmedia/supertest#readme ),也可以选择返回:

    describe('GET /user', function() {
      it('responds with json', function() {
        return request(app)
          .get('/user')
          .set('Accept', 'application/json')
          .expect('Content-Type', /json/)
          .expect(200);
      });
    });
    

    1. 异步
    describe('GET /user', function() {
      it('responds with json', async function() {
        await request(app)
          .get('/user')
          .set('Accept', 'application/json')
          .expect('Content-Type', /json/)
          .expect(200);
      });
    });
    
    推荐文章