Eli*_*cia 3 mocha.js node.js async-await chai
我正在使用Mocha和Chai HTTP测试Rest API。我一直在使用回调编写所有测试用例,现在我想使用async / await,因为它具有更多可读性的tan回调和Promise,因此我得到了以下代码:
let sport1, sport2;
let user1, user2;
let user1Token;
let event1, event2, event3, event4;
beforeEach(async function () {
const preUser1 = test.createUser('user1@test.com');
const preUser2 = test.createUser('user2@test.com')
sport1 = await Sport.create(test.createSport('Tenis'));
sport2 = await Sport.create(test.createSport('Baloncesto'));
user1 = await User.create(preUser1);
user2 = await User.create(preUser2);
event1 = await Event.create(test.createEventDb(user1._id, sport1._id));
event2 = await Event.create(test.createEventDb(user1._id, sport2._id));
event3 = await Event.create(test.createEventDb(user2._id, sport1._id));
event4 = await Event.create(test.createEventDb(user2._id, sport2._id));
await chai.request(app)
.post(`${apiPath}/sessions`)
.set('content-type', 'application/json')
.send({ email: preUser1.email, password: preUser1.password })
.end(function (err, res) {
console.log(res.body)
user1Token = res.body.data.session.token;
});
});
Run Code Online (Sandbox Code Playgroud)
等待语句工作正常,但是问题出在柴。我收到此错误:
1) Events "before each" hook for "should return 200, id and event info":
TypeError: First argument must be a string or Buffer
at ClientRequest.end (_http_outgoing.js:605:11)
at Test.Request.end (node_modules/superagent/lib/node/index.js:873:9)
at node_modules/superagent/lib/request-base.js:72:12
at Test.then (node_modules/superagent/lib/request-base.js:71:31)
at process._tickCallback (internal/process/next_tick.js:109:7)
Run Code Online (Sandbox Code Playgroud)
但是,如果没有async / await调用,则不会引发此错误。有什么想法吗?谢谢。
正如@Rhayene所述,要使用Chai并不能使用该.end()方法,这就是为什么我会收到该错误的原因。因此,您只需将响应存储在变量中,然后进行所需的声明即可。所以,我的重构代码是这样的:
let sport1, sport2;
let user1, user2;
let user1Token;
let event1, event2, event3, event4;
beforeEach(async function () {
const preUser1 = test.createUser('user1@test.com');
const preUser2 = test.createUser('user2@test.com')
sport1 = await Sport.create(test.createSport('Tenis'));
sport2 = await Sport.create(test.createSport('Baloncesto'));
user1 = await User.create(preUser1);
user2 = await User.create(preUser2);
event1 = await Event.create(test.createEventDb(user1._id, sport1._id));
event2 = await Event.create(test.createEventDb(user1._id, sport2._id));
event3 = await Event.create(test.createEventDb(user2._id, sport1._id));
event4 = await Event.create(test.createEventDb(user2._id, sport2._id));
const res = await chai.request(app)
.post(`${apiPath}/sessions`)
.set('content-type', 'application/json')
.send({ email: preUser1.email, password: preUser1.password })
user1Token = res.body.data.session.token;
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2824 次 |
| 最近记录: |