【问题标题】:Trouble with Abstraction in MochaJS with Typescript and Axios带有 Typescript 和 Axios 的 MochaJS 中的抽象问题
【发布时间】: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


    【解决方案1】:

    找到了。在原始测试用例中调用 done() 是告诉 mocha 测试用例在 axios 调用的异步部分执行之前完成执行。删除那条线,我就进入了街区。

    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
    

    【讨论】:

      猜你喜欢
      • 2021-11-24
      • 2020-06-19
      • 2021-04-15
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      • 2011-10-17
      • 1970-01-01
      • 2021-09-16
      相关资源
      最近更新 更多