如何让摩卡咖啡等待下一次测试

时间:2019-01-13 15:53:59

标签: javascript node.js mocha supertest

  

当我运行npm测试时,出现“ TypeError [ERR_HTTP_INVALID_HEADER_VALUE]:标头“ x-access-token”的值“ undefined”无效”错误。看起来摩卡咖啡在获得令牌之前进行了第二次测试。我尝试使用setTimeOut方法添加延迟,但是仍然出现上述错误。

 // creates valid-user object
    const validUser = {
      username: 'Rigatoni',
      email: 'yahoo.com',
      password: 'qwerty1234567',
    };
    describe('Post Tests', () => {
      // login and get token...
      let token;
      before((done) => {
        request(app)
          .post('/api/v1/auth/login')
          .send(validUser)
          .end((err, res) => {
            // eslint-disable-next-line prefer-destructuring
            token = res.body.token;
            console.log('token', token);
            expect(res.status).to.equal(200);
          });
        // console.log('token test');
        done();
      });

      describe('GET all posts', () => {
        it('should return all posts', (done) => {
          request(app)
            .get('/api/v1/posts')
            .set('x-access-token', token)
            .end((err, res) => {
              expect(res.body.success).to.equal(true);
            });
          done();
        });
      });
    });

1 个答案:

答案 0 :(得分:0)

您的测试几乎是正确的!

提供了done回调函数,以使Mocha知道何时可以继续进行。但是,在调用异步done()方法后的 之后,您正在测试中立即调用request。 Mocha认为测试在您提出请求之前就已经完成。

将对每个测试的done()调用移到回调函数中(例如,在expect()之后的行),以便直到请求完成后才执行它。然后,摩卡咖啡将等到测试结束再继续。

示例:

request(app)
        .get('/api/v1/posts')
        .set('x-access-token', token)
        .end((err, res) => {
          expect(res.body.success).to.equal(true);
          done();
        });