当前位置: 首页 > 知识库问答 >
问题:

以promise为基础的期望,以玩笑为基础的功能,不会失败

萧业
2023-03-14

所以我花了几分钟调试我的jest测试,想知道为什么它没有失败,jest似乎使用expect抛出的异常来处理失败,而我的函数却没有抛出它应该抛出的未处理异常:

这是我通过的测试:

    fit('should evalute let over lambda', function() {
        lips.exec(`(define x 10) (* x x)`).then(result => {
            expect(result).toEqual([undefined, 20]);
        }) //.catch(e => console.log(e.message));
    });

catch中的console.log显示代码失败,但summary表示所有测试都通过了。

这是我的exec函数,一切都好吗?

function exec(string, env, dynamic_scope) {
    if (env === true) {
        env = dynamic_scope = global_env;
    } else {
        env = env || global_env;
    }
    var list = parse(tokenize(string));
    return new Promise((resolve, reject) => {
        var results = [];
        (function recur() {
            function next(value) {
                console.log('next');
                results.push(value);
                recur();
            }
            var code = list.shift();
            if (!code) {
                resolve(results);
            } else {
                try {
                    var result = evaluate(code, env, dynamic_scope);
                } catch (e) {
                    return reject(e);
                }
                if (result instanceof Promise) {
                    console.log('promise');
                    result.then(next).catch(reject);
                } else {
                    next(result);
                }
            }
        })();
    });
}

诺言已经解决了。执行expect并抛出异常,但不传播。

共有1个答案

车诚
2023-03-14

您需要 测试中的承诺链,这样测试运行者才能看到它的结果(并等待它完成)。

 类似资料:
  • 基础功能 百度移动统计基于增长黑客模型,结合将用户角色及使用场景的差异,将平台的业务架构梳理划分为包含:分析、开发、营销、用户管理、探索和设置六大模块。 其中“分析”模块是最主要的基础功能模块,包含: 应用概况 定制分析(特色功能) 用户分析 使用行为(包含:事件分析、页面分析) 渠道分析 留存分析 漏斗分析 “开发”模块主要适用于研发人员,用于接入测试设备,监控产品崩溃详情。具体包含: 错误分析

  • 本章节已移动至 8.功能

  • 编辑器内提供了许多功能,这里主要介绍一些常用的功能。 扩展系统 消息系统 多语言系统 配置系统 UI 组件

  • 文档中结合具体的场景来介绍诸葛io的基础功能使用,并提供了相应的视频教程。了解这些能够帮助您更好地使用诸葛io,开启数据驱动之旅。 事件分析 用户 整体 漏斗 留存 页面点击分析 看板 订阅数据日报 实时概览

  • Foundation提供了一组SASS实用程序函数,可以与util , color , selector , unit , value等一起使用。 您可以使用以下代码行一次导入所有实用程序文件 - @import 'util/util'; 您还可以导入单个实用程序文件,如下所示 - @import 'util/color'; @import 'util/selector'; @import 'u

  • 会议的作用是什么? 一般来说, Session 建立与数据库的所有对话,并表示在数据库生命周期内已加载或与之关联的所有对象的“保留区域”。它提供了一个界面,在这里进行SELECT和其他查询,这些查询将返回和修改ORM映射的对象。ORM对象本身在 Session ,在名为 identity map -维护每个对象唯一副本的数据结构,其中“唯一”表示“只有一个具有特定主键的对象”。 这个 Sessio