当我运行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();
});
});
});
答案 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();
});