比较断言中的函数输出类型

2024-07-01

我正在努力使用 chai、mocha 和 JS-DOM 编写测试断言。 我有一个简单的函数,例如:

function HtmlElement(el) {
  this.element = (el instanceof HTMLElement) ? el :document.createElement(el);
}

在我的测试中:

it('should have addClass method', function () {
  const ul = (new HtmlElement('ul'));
  ul.element.should.be.equals('<ul></ul>'); // Outputs the actual UL 
});

但错误:

AssertionError: expected <ul></ul> to equal '<ul></ul>'

是我无法理解的 - 返回什么类型的输出以及这里应该使用什么断言?


这就是 deceze 的意思他的评论 https://stackoverflow.com/questions/54706993/comparing-the-function-output-type-in-assertion#comment96200091_54706993。在测试中:

ul.element.should.be.equals('<ul></ul>');

ul.element是一个 JavaScript 对象。更准确地说,它是一个 DOM 节点。然而,<ul></ul>是一个字符串。 Chai 与===。如果你将 DOM 节点与使用的东西进行比较===,唯一会返回真值的是完全相同的 DOM 节点。 “完全相同”意味着完全相同的 JavaScript 对象。如果你这样做:

const node = document.createElement("ul");
console.log(node === node);

You get true在控制台上。如果你这样做:

console.log(document.createElement("ul") === document.createElement("ul"));

You get false因为两个操作数是两个不同的对象。出于您的目的,两个 DOM 节点可能是“相同的”,但它们并不相同===被关注到。由于任何字符串都不能与 DOM 节点是同一对象,因此您的测试会失败。错误消息可能看起来令人困惑,但那是因为当 JSDOM 打印出错误时,它会序列化 DOM 节点。也就是说,然后JSDOM打印出DOM节点,它真的打印出了它的值.outerHTML财产,以及.outerHTML是节点的序列化。

您想要测试的内容取决于您的最终目标是什么。如果你想测试元素的结构,你可以检查.outerHTML, 就像是:

ul.element.should.have.property("outerHTML").equal("<ul></ul>");

你的测试的标题是“应该有 addClass 方法”......所以也许你应该测试这个:

ul.element.should.have.property("addClass").be.a("function");

如果你想让它作为测试的代理,你会得到一个HTMLElement,我建议改为这样做:

ul.element.should.be.instanceof(HTMLElement);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

比较断言中的函数输出类型 的相关文章

随机推荐

  • Mac 上缺少 spring-boot-starter-web hibernate-validator 依赖项

    我在STS Spring工具套件 上创建了Spring Boot项目 Spring Starter Project Window和Mac都有 这是我的pom xml
  • 尝试创建测试时注入自动装配依赖项失败

    我正在尝试创建一个junit测试存储库 我得到了这个很好的异常 完全例外 org springframework beans factory BeanCreationException Error creating bean with na
  • 多处理冻结计算机

    我通过使用多处理提高了执行时间 但我不确定 PC 的行为是否正确 它会冻结系统 直到所有进程完成 我使用的是 Windows 7 和 Python 2 7 也许我做错了 这就是我所做的 def do big calculation sub
  • 解析 Apple Mach O-Linker 错误?

    我正在使用解析框架 突然出现 39 个错误 即使我删除框架 它仍然有错误 我已经检查了构建阶段 设置和路径 但没有任何效果 另外 我正在使用 xcode 4 6 3 我有一台过时的 macbook Ld Users anikakablan
  • 修改 %in% 运算符以查找列表中的对象

    我必须修改 in 运算符将在列表中查找对象 我有一个清单 list1 lt list c 5 6 6 list 2 c 5 6 string 未修改 in 测试这些值后的运算符 c 5 6 in list1 6 in list1 2 in
  • ggplot2 每个美学的多个尺度/图例,重新审视[重复]

    这个问题在这里已经有答案了 我有一个例子 我想使用 ggplot 突出显示序列比对的几个属性 我正在使用 geom tile 并希望为两个分数属性提供两组不同颜色的图块 我只能想象一个 我意识到每种审美的一个尺度的限制 以及其背后的逻辑 h
  • 选择数据结构

    根据需求使用不同的数据结构 但我如何知道应该使用哪种数据结构 我只是想知道如何选择合适的数据结构 谢谢 此流程图适用于 C 中的 STL 但您可以用 C 实现 STL 容器支持的任何数据结构 列表是一个链接列表 Vector是一个动态数组
  • 检测 Citrix“应用程序模式”?

    请原谅我可能用错了这个 应用程序模式 的术语 我们的应用程序在启动过程中遇到问题 直到主窗口打开后才显示任务栏图标 即使在此之前屏幕上有加载进度窗口 登录窗口等 我们更改代码来修复此问题 但不幸的是 当通过 citrix 运行应用程序时 此
  • 变量值传递到另一个表单,VB.NET

    我确实有两个公共变量 每个变量都来自两种不同的形式 Form1 VB Public UserNo As String Form2 VB Public MyUserNo As String 在我的 Form2 VB 文件中 我为 Form1
  • Android 6.0 中的打瞌睡和应用程序待机模式

    Google 在 Android 6 0 操作系统中引入了 Doze 和应用程序待机模式 设备将进入Doze如果设备被拔掉并且在一段时间内未使用并且应用程序在一段时间内保持不活动状态 则该应用程序将进入模式StandBy模式 如果我错了请纠
  • Android Fragment 后台事务

    我正在开发一个带有片段的应用程序 它有一个 JavaScript 接口 在主 Activity 中调用 并具有片段替换逻辑 当应用程序位于前台时 一切正常 但当应用程序位于后台时 片段事务替换不起作用 当我返回应用程序时 我仍然看到旧片段
  • 调用exe中定义的函数

    我需要知道一种从 python 脚本调用 exe 中定义的函数的方法 我知道如何从 py 文件调用整个 exe 除非您的 EXE 是 COM 对象 或者像 dll 那样专门导出某些函数 否则这是不可能的 对于 COM 方法 请查看以下资源
  • Elasticsearch 字段名称区分大小写

    我正在寻找有关 ElasticSearch 中字段名称区分大小写的建议和最佳实践 以及是否有全局配置来使字段名称不区分大小写 另外 如果映射中不存在 是否可以禁止 ES 添加不同的字段 这是一个例子来说明这一点 1 使用小写的一个字段 名称
  • Android 自定义进度条不旋转

    我想更改默认动画ProgressBar 所以我在我的主题中添加了自定义样式 样式 xml 我在我的内部调用这种风格ProgressBar具有以下内容 进度条 xml
  • 从 iso 货币符号获取 NativeEnglishName,而不依赖于登录用户的当前文化

    我所拥有的是货币IsoCode EUR 此属性也可以在 RegionInfo 类 gt ri ISOCurrencySymbol 但 RegionInfo 类取决于当前登录的用户 我想要的是获得像 Euro 这样的 NativeEnglis
  • 如何使用 awk 在文本文件的第一行之前添加一个空行

    我有一些文本文件 我想在每个文本文件的第一行之前添加一个空行 我怎样才能用 awk 做到这一点 我会比较喜欢GNU sed对于此任务 要在文件开头添加空格 sed 1s file txt 要使用以下命令对多个文本文件执行此操作 txt扩展名
  • @AfterReturning 方面在切入点方法的同一事务中执行?

    我需要在执行函数后执行任务 我为此使用了 Aspect 但我有些困惑 我在 Spring 服务中有一个函数 A Transactional readOnly false isolation Isolation DEFAULT propaga
  • 如何用PHP识别google/yahoo/msn的网络爬虫?

    AFAIK SERVER REMOTE HOST 应该以 google com 或 yahoo com 结尾 但这是最有保障的方法吗 还有其他出路吗 您通过以下方式识别搜索引擎用户代理和IP地址 http www jafsoft com s
  • 比较 UITextView 中的文本?

    我们如何比较输入的文本UITextVIew用代码中的默认文本来确定它们是否相同 您可以使用以下方法NSString http developer apple com library mac documentation Cocoa Refer
  • 比较断言中的函数输出类型

    我正在努力使用 chai mocha 和 JS DOM 编写测试断言 我有一个简单的函数 例如 function HtmlElement el this element el instanceof HTMLElement el docume