【发布时间】:2020-08-28 14:05:36
【问题描述】:
typescript 和 mocha 的新手,所以希望这是一个简单的解决方法,我似乎无法自己解决。
给定以下测试用例
it('should make a request', function (done) {
console.log('CHECKPOINT ALPHA')
var data = JSON.stringify({"REDACTED"});
var headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + token
}
const response = request("post", rootUrl, headers, data, done)
//todo add some validations
done()
而导入的request函数我在另一个文件中定义为:
export function request(method, url, headers, data, done, statusCode = null) {
console.log('CHECKPOINT BETA')
let config : AxiosRequestConfig = {
method: method,
url: url,
headers: headers,
data : data
};
if(statusCode == null) {
switch (method) {
case "post":
statusCode = 201;
break;
case "get":
statusCode = 200;
break;
case 'patch':
statusCode = 201;
break;
case 'put':
statusCode = 201;
break;
case 'delete':
statusCode = 204;
}
}
console.log('CHECKPOINT CHARLIE')
axios(config)
.then(function (response) {
console.log('CHECKPOINT DELTA')
assert(response.data.statusCode == statusCode)
console.log(JSON.stringify(response.data))
done()
})
.catch(function (error) {
console.log('CHECKPOINT ECHO')
fail(error)
done()
});
}
我通常希望它能够工作并提出请求。相反,控制台的最后一个日志始终是检查点 Charlie。同样,在运行调试器时,它似乎会跳过整个 axios 调用主体。
如果我将请求函数的内容复制到测试用例的主体中,一切都会按预期进行,因此它与两个文件的相互作用有关。我的猜测是 axios 块中的 done() 方法与测试文件中的方法不同,导致测试继续并在 axios 块中的任何代码正确执行之前终止执行。
问题的简短版本——如何让脚本执行 axios 块内的代码,同时将这些代码保存在单独的文件中?理想情况下,我希望将 axios 的响应返回到测试脚本
【问题讨论】:
标签: javascript typescript asynchronous axios mocha.js