发布历史

v5.1.1

版本 v5.1.1

变更内容

  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1605 中为 JSDoc 注释设置 ESLint
  • build(deps-dev): 由 @dependabot 在 https://github.com/chaijs/chai/pull/1608 中将 ip 从 1.1.8 升级到 1.1.9
  • 由 @MattiSG 在 https://github.com/chaijs/chai/pull/1611 中修正 Mocha 导入说明
  • fix: 由 @43081j 在 https://github.com/chaijs/chai/pull/1609 中为 toThrow 支持一些虚拟上下文

新贡献者

  • @MattiSG 在 https://github.com/chaijs/chai/pull/1611 中做出了他们的首次贡献

完整变更日志: https://github.com/chaijs/chai/compare/v5.1.0…v5.1.1

v5.1.0

版本 v5.1.0

变更内容

  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1593 中移除无用防护并为构造函数添加括号
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1596 中清理 jsdoc 注释
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1598 中将“法律注释”格式的注释转换为 jsdoc 或普通注释
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1592 中实现 iterable 断言
  • 由 @developer-bandi 在 https://github.com/chaijs/chai/pull/1601 中修正断言接口
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1583 中设置对相同成员的支持
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1602 中修正发布脚本

新贡献者

  • @developer-bandi 在 https://github.com/chaijs/chai/pull/1601 中做出了他们的首次贡献

完整变更日志: https://github.com/chaijs/chai/compare/v5.0.3…v5.1.0

v5.0.3

版本 v5.0.3

修正了 v5.0.2 的错误发布。

完整变更日志: https://github.com/chaijs/chai/compare/v5.0.2…v5.0.3

v5.0.2

版本 v5.0.2

变更内容

  • build(deps): 由 @dependabot 在 https://github.com/chaijs/chai/pull/1558 中升级 nanoid 和 mocha
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1559 中移除 bump-cli
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1560 中更新开发依赖
  • fix: 由 @43081j 在 https://github.com/chaijs/chai/pull/1576 中为 node 兼容性(5.x)移除 ??
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1579 中将 loupe 更新到最新版本
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1580 中重新启用一些 webkit 测试
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1581 中从 test/should.js 中移除大量 if 语句
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1582 中移除大量未使用文件
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1566 中修正 1564

完整变更日志: https://github.com/chaijs/chai/compare/v5.0.1…v5.0.2

v4.4.1

版本 v4.4.1

变更内容

  • fix: 由 @43081j 在 https://github.com/chaijs/chai/pull/1574 中为 node 兼容性移除 ??

完整变更日志: https://github.com/chaijs/chai/compare/v4.4.0…v4.4.1

v4.4.0

版本 v4.4.0

变更内容

  • 由 @forty 在 https://github.com/chaijs/chai/pull/1553 中允许 deepEqual 函数在全局范围内配置(4.x.x 分支)

完整变更日志: https://github.com/chaijs/chai/compare/v4.3.10…v4.4.0

v5.0.0-rc.0

版本 v5.0.0-rc.0

Chai@v5 的第一个候选发布版本!

我们发布了一些 alpha 版本,并在不同的项目中进行了测试,取得了良好的成功。这个 RC 版本包含了所有这些更改,以及自那时以来发现的任何修复。

请在你的项目中尝试使用它,并让我们知道你是否遇到了任何问题,以便我们在发布版本 5 之前进行修复!

感谢你使用 Chai 🙏🏻

变更内容

  • feat: 由 @pcorpet 在 https://github.com/chaijs/chai/pull/1401 中使用 chaijs/loupe 进行检查
  • docs: 由 @Izzur 在 https://github.com/chaijs/chai/pull/1413 中修正 README 中的 URL
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1416 中移除 get-func-name 依赖
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1424 中将 Makefile 脚本转换为 npm 脚本
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1422 中清理 README 徽章
  • fix: 由 @stevenjoezhang 在 https://github.com/chaijs/chai/pull/1400 中修正 package.json - exports 字段的弃用警告
  • fix: 由 @snewcomer 在 https://github.com/chaijs/chai/pull/1458 中将 deep-eql 包升级以支持符号
  • 由 @43081j 在 https://github.com/chaijs/chai/pull/1498 中的 ES 模块转换 PoC
  • chore: 由 @43081j 在 https://github.com/chaijs/chai/pull/1503 中删除 CommonJS 支持
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1527 中更新 pathval
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1528 中更新 check-error
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1542 中将 deep-eql 更新到最新版本
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1544 中将 type-detect 内联为简单函数
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1545 中更新 loupe
  • 由 @mavaddat 在 https://github.com/chaijs/chai/pull/1460 中修正错别字“Test an object”而不是“Test and object”
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1543 中将 assertion-error 更新到其最新主要版本!
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1546 中将 Karma 替换为 Web Test Runner
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1548 中移除 codecov
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1550 中移除 chai 版本常量
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1549 中移除 istanbul

新贡献者

  • @Izzur 在 https://github.com/chaijs/chai/pull/1413 中做出了他们的首次贡献
  • @koddsson 在 https://github.com/chaijs/chai/pull/1416 中做出了他们的首次贡献
  • @stevenjoezhang 在 https://github.com/chaijs/chai/pull/1400 中做出了他们的首次贡献
  • @43081j 在 https://github.com/chaijs/chai/pull/1498 中做出了他们的首次贡献

完整变更日志: https://github.com/chaijs/chai/compare/v4.3.10…v5.0.0-rc.0

v5.0.0

版本 v5.0.0

重大变更

  • Chai 现在只支持 EcmaScript 模块 (ESM)。这意味着你的测试需要使用 import {...} from 'chai'import('chai')require('chai') 将会导致 nodejs 中的失败。如果你正在使用 ESM 并遇到失败,可能是由于捆绑器或转译器错误地将导入语句转换为 require 调用。
  • 放弃对 Internet Explorer 的支持。
  • 放弃对 NodeJS < 18 的支持。
  • 现在最低支持的浏览器为 Firefox 100、Safari 14.1、Chrome 100、Edge 100。对这些版本之前的浏览器的支持为“尽力而为”(针对旧版浏览器的错误报告将单独评估,并可能标记为不会修复)。

变更内容

  • feat: 由 @pcorpet 在 https://github.com/chaijs/chai/pull/1401 中使用 chaijs/loupe 进行检查
  • docs: 由 @Izzur 在 https://github.com/chaijs/chai/pull/1413 中修正 README 中的 URL
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1416 中移除 get-func-name 依赖
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1424 中将 Makefile 脚本转换为 npm 脚本
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1422 中清理 README 徽章
  • fix: 由 @stevenjoezhang 在 https://github.com/chaijs/chai/pull/1400 中修正 package.json - exports 字段的弃用警告
  • fix: 由 @snewcomer 在 https://github.com/chaijs/chai/pull/1458 中将 deep-eql 包升级以支持符号
  • 由 @43081j 在 https://github.com/chaijs/chai/pull/1498 中的 ES 模块转换 PoC
  • chore: 由 @43081j 在 https://github.com/chaijs/chai/pull/1503 中删除 CommonJS 支持
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1527 中更新 pathval
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1528 中更新 check-error
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1542 中将 deep-eql 更新到最新版本
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1544 中将 type-detect 内联为简单函数
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1545 中更新 loupe
  • 由 @mavaddat 在 https://github.com/chaijs/chai/pull/1460 中修正错别字“Test an object”而不是“Test and object”
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1543 中将 assertion-error 更新到其最新主要版本!
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1546 中将 Karma 替换为 Web Test Runner

新贡献者

  • @Izzur 在 https://github.com/chaijs/chai/pull/1413 中做出了他们的首次贡献
  • @stevenjoezhang 在 https://github.com/chaijs/chai/pull/1400 中做出了他们的首次贡献
  • @43081j 在 https://github.com/chaijs/chai/pull/1498 中做出了他们的首次贡献

完整变更日志: https://github.com/chaijs/chai/compare/4.3.1…v5.0.0

v5.0.0-alpha.2

版本 v5.0.0-alpha.2

变更内容

  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1542 中将 deep-eql 更新到最新版本
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1544 中将 type-detect 内联为简单函数
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1545 中更新 loupe
  • 由 @mavaddat 在 https://github.com/chaijs/chai/pull/1460 中修正错别字“Test an object”而不是“Test and object”
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1543 中将 assertion-error 更新到其最新主要版本!
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1546 中将 Karma 替换为 Web Test Runner

完整变更日志: https://github.com/chaijs/chai/compare/v5.0.0-alpha.1…v5.0.0-alpha.2

v4.3.10

版本 v4.3.10

此版本只是将所有依赖项升级到其最新的非破坏性版本。

变更内容

  • 由 @keithamus 在 https://github.com/chaijs/chai/pull/1540 中升级所有依赖项

完整变更日志: https://github.com/chaijs/chai/compare/v4.3.9…v4.3.10

v4.3.9

版本 v4.3.9

升级依赖项。

此版本升级依赖项以解决 **CVE-2023-43646**,其中大型函数名会导致“灾难性回溯”(也称为 ReDOS 攻击),这会导致测试套件挂起。

完整变更日志: https://github.com/chaijs/chai/compare/v4.3.8…v4.3.9

v4.3.8

版本 v4.3.8

变更内容

  • 4.x.x: 由 @bugwelle 在 https://github.com/chaijs/chai/pull/1487 中修正 GitHub 上的提交日志链接
  • build(deps): 由 @dependabot 在 https://github.com/chaijs/chai/pull/1488 中将 socket.io-parser 从 4.0.4 升级到 4.0.5
  • 由 @mavaddat 在 https://github.com/chaijs/chai/pull/1459 中修正 test.js 中的小错误
  • docs: 由 @scarf005 在 https://github.com/chaijs/chai/pull/1490 中指定 objDisplay 的返回类型
  • 由 @matheus-rodrigues00 在 https://github.com/chaijs/chai/pull/1521 中更新 CONTRIBUTING.md
  • Fix: 由 @peanutenthusiast 在 https://github.com/chaijs/chai/pull/1534 中将 exports.version 更新为当前版本

新贡献者

  • @bugwelle 在 https://github.com/chaijs/chai/pull/1487 中做出了他们的首次贡献
  • @mavaddat 在 https://github.com/chaijs/chai/pull/1459 中做出了他们的首次贡献
  • @scarf005 在 https://github.com/chaijs/chai/pull/1490 中做出了他们的首次贡献
  • @matheus-rodrigues00 在 https://github.com/chaijs/chai/pull/1521 中做出了他们的首次贡献
  • @peanutenthusiast 在 https://github.com/chaijs/chai/pull/1534 中做出了他们的首次贡献

完整变更日志: https://github.com/chaijs/chai/compare/v4.3.7…v4.3.8

v5.0.0-alpha.1

版本 v5.0.0-alpha.1

变更内容

  • chore: 由 @43081j 在 https://github.com/chaijs/chai/pull/1503 中删除 CommonJS 支持
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1527 中更新 pathval
  • 由 @koddsson 在 https://github.com/chaijs/chai/pull/1528 中更新 check-error

完整变更日志: https://github.com/chaijs/chai/compare/v5.0.0-alpha.0…v5.0.0-alpha.1

v5.0.0-alpha.0

版本 v5.0.0-alpha.0

此版本是 Chai 5 的第一个 alpha 版本。从 v4.x 的变化

  • 此包现在使用 ESM 模块。不再支持 CommonJS 环境。如果你希望使用 CommonJS 环境,请继续使用 Chai 4。
  • 放弃对 NodeJS 版本低于 16 的支持。如果你正在使用 NodeJS v4-v15,请继续使用 Chai 4。
  • 放弃对 Internet Explorer 10 & 11 的支持。如果你希望针对 Internet Explorer 10 或 11 进行测试,请继续使用 Chai 4。
  • 放弃对 Safari 版本低于 14 的支持。如果你希望针对 Safari v10-v13 进行测试,请继续使用 Chai 4。
  • 放弃对 EdgeHTML 的支持。如果你希望针对低于 18 版本的 Edge(即,不是 Chromium Edge),请继续使用 Chai 4。
  • 放弃对 Firefox 版本低于 102 的支持。如果你希望针对 Firefox 60 到 101 进行测试,请继续使用 Chai 4。
  • 放弃对 Chrome 版本低于 108 的支持。如果你希望针对 Chrome 68 到 107 进行测试,请继续使用 Chai 4。

v4.3.7

版本 v4.3.7

变更内容

  • fix: 由 @snewcomer 在 https://github.com/chaijs/chai/pull/1483 中将 deep-eql 包升级以支持符号比较

完整变更日志: https://github.com/chaijs/chai/compare/v4.3.6…v4.3.7

版本 v4.3.6

将 loupe 更新到 2.3.1

版本 v4.3.5

  • build chaijs fca5bb1
  • build(deps-dev): 升级 codecov 从 3.1.0 到 3.7.1 (#1446) 747eb4e
  • fix package.json exports 022c2fa
  • fix: package.json - 弃用 exports 字段的警告 (#1400) 5276af6
  • feat: 使用 chaijs/loupe 进行检查 (#1401) (#1407) c8a4e00

https://github.com/chaijs/chai/compare/v4.3.4…v4.3.5

版本 v4.3.4

这修复了 BigInt 的检查行为 (#1321) (#1383) 感谢 @vapier

4.3.3 / 2021-03-03

版本 4.3.3

这重新引入了 Assertion 作为 mjs 文件中的导出。请查看 https://github.com/chaijs/chai/pull/1378 & https://github.com/chaijs/chai/issues/1375

4.3.2 / 2021-03-03

版本 4.3.2

这修复了 IE11 中的回归。请查看 https://github.com/chaijs/chai/pull/1380 & https://github.com/chaijs/chai/issues/1379

4.3.1 / 2021-03-02

版本 4.3.1

此版本修复了与 4.3.0 的引擎不兼容性

4.x.x 系列版本将与 Node 4.0 兼容。请将 Node 4 中发现的任何错误报告为错误,并将进行修复。

5.x.x 系列版本发布后,将不再支持 Node 4.0

此修复还确保 pathval 更新为 1.1.1 以修复 CVE-2020-7751

4.3.0 / 2021-02-04

版本 4.3.0

这是一个小版本更新。

自上次发布以来,没有太多变化,但此版本包含一个非常重要的更改(#1257),它将允许 jest 用户获得更好的差异比较结果。从本版本开始,jest 用户将能够看到差异比较中使用了哪种运算符。 operator 是断言失败时抛出的 AssertionError 的一个属性。此标志指示进行了哪种比较。

对于插件维护者来说,这也是一个重要的变化。插件维护者现在可以访问 operator flag, which they can have access to through an util method called getOperator`。

感谢所有为本版本做出贡献的优秀人士。

新功能

  • 允许 contain.oneOf 获取可能的数值数组 (@voliva)
  • 将运算符属性添加到断言错误 (#1257) (@rpgeeganage)
  • 现在 closeTo 错误信息将在需要 delta 时通知用户 (@eouw0o83hf)

文档

  • 在 oneOf 文档中添加 contains 标志 (@voliva)

测试

  • 确保 useProxy 配置在 overwriteProperty 中被检查 (@vieiralucas)
  • contain.oneOf 添加测试 (@voliva)

杂项

  • 将 mocha 更新到版本 6.1.4
  • 在 ci 中添加 node v10 和 v12 (@vieiralucas)
  • 放弃对 node v4、v6 和 v9 的支持 (@vieiralucas)
  • 修复无头 Chrome 的 sauce 配置 (@meeber)
  • 更新开发依赖项 (@meeber)
  • 移除 phantomjs 依赖项 (#1204)

4.2.0 / 2018-09-25

版本 4.2.0

这是一个小版本更新。感谢所有贡献者和用户!

新功能

  • feat(assertions): 添加 ‘still’ 语言链 (#1194; @ScottRudiger)
  • .lengthOf 用于 Maps 和 Sets (#1110, #1131; @asbish)
  • feat: 添加 assert.fail([message]) 接口 (#1116, #1117; @s-leroux)

Bug 修复

  • fix: 从 .deep.equal 栈中移除 Chai 框架 (#1124; @meeber)
  • 在 proxyExcludedKeys 中添加 ‘catch’ 关键字 (#1050, #1101; @generalandrew)
  • 属性断言只有在嵌套时才应该接受字符串 (#1043, #1044; @solodynamo)
  • fix: 使测试在 --use_strict 下通过 (#1034, #1040; @shvaikalesh)

性能

  • perf: 优化 proxify 和 stringDistance (#1098; @sophiebits)
  • fix: 避免在 stringDistance 中重复调用 String#slice (#1095; @bmeurer)

样式

  • 修复拼写错误并移除尾随空格 (#1042; @simonewebdesign)
  • 移除不必要的代码 (#1049; @abetomo)
  • 修复变量声明 (#1048; @abetomo)

测试

  • test(assert): 增加覆盖率 (#1084, #1085; @brutalcrozt)
  • test: 停止在 Proxy 测试中修改全局变量 (#1144; @meeber)

文档

  • 修复 assert.notInclude 示例中的不平衡引号 (#1200; @haykam821)
  • docs: 修复错误的 .string 示例 (#1156, #1157; @meeber)
  • 修复了 package npm url (#1151; @wadie)
  • 拼写 (#1145; @jsoref)
  • docs: 纠正拼写 (#1141; @Powell-v2)
  • docs: 修复错误的 .property 链式示例 (https://github.com/chaijs/chai/issues/193#issuecomment-360334369, #1130; @meeber)
  • docs: 改善 throws 示例 (#1113; @ColinEberhardt)
  • 修复拼写错误 (#1107; @tbroadley)
  • docs: 纠正 .ok 描述 (#1047; @shvaikalesh)

杂项

  • chore: 更新 package-lock.json (#1198; @meeber)
  • 将 mocha 更新到最新版本 (#1127)
  • chore: 更新依赖项 (#1157; @meeber)
  • 将 browserify 更新到最新版本 (#1135)
  • chore: 更新 Travis 配置中的 Node 版本 (#1126; @meeber)
  • chore: 从 Sauce 配置中移除 Opera (#1125; @meeber)
  • chore: 更新依赖项 (#1118; @meeber)
  • chore: 更新依赖项 (#1074; @meeber)
  • Chore: 将覆盖率服务(coverall 改为 codecov) (#927, #1073; @brutalcrozt)
  • chore: 添加 package-lock.json (#1013; @meeber)

4.1.2 / 2017-08-31

版本 4.1.2

此版本修复了在某些环境中运行时的错误,并包含了一些小的文档修复。

Bug 修复

  • fix: 将 deep-eql 更新到版本 3.0.0 (#1020)
  • fix: 替换导致严格 CSP 下断裂的代码 (#1032; @Alhadis)

文档

  • docs: 添加丢失的断言参数 (#1017, #1023; @Hpauric)
  • docs: 更新许可证文件中的年份 (#1025; @yanca018)

4.1.1 / 2017-08-05

版本 4.1.1

此版本包含一些错误和文档修复。

Bug 修复

  • fix: .instanceof 允许在 IE11 中使用 DOM 接口 (#1000, #1008; @meeber)
  • fix: .include 能够处理所有对象 (#1009, #1012; @meeber)

文档

  • fix: 纠正 hasAnyKeys 注释错误 (#1014; @zenHeart)
  • docs: 重新缩进 hasAnyKeys 代码 (#1016; @keithamus)

4.1.0 / 2017-07-11

版本 4.1.0

此版本包含一个新功能和一些错误修复。

新功能

  • 为 include() 添加 ES6 集合支持 (#970, #994; @shvaikalesh)

Bug 修复

  • 允许 isBelow 和 isAbove 断言使用日期 (#980, #990; @v1adko)
  • fix: 检查 .property 断言中的目标类型 (#992; @meeber)

杂项

  • 添加 lgtm.com 发现的丢失的 var 关键字 (#988; @samlanning)
  • refactor: expectTypes 访问 ssfi 标志 (#993; @meeber)
  • 创建 CODEOWNERS (#1004; @keithamus)

4.0.2 / 2017-06-05

版本 4.0.2

我们发布了另一个 bug 修复版本,解决了 WebPack 1 用户的一些问题。

Bug 修复

  • 恢复从 package.json 中获取版本信息,一些捆绑器工具(如 Webpack)默认情况下不包含 json 加载器,尽管 Node 可以处理此问题。此更改将版本号硬编码回代码库中。 (#985, #986)

4.0.1 / 2017-05-31

版本 4.0.1

4.0.1

当然,任何重大版本发布后都会很快发布 bug 修复版本——我们也一样!

Bug 修复

  • 移除 package.json browser 字段,该字段被错误地添加,导致像 Browserify 或 Webpack 这样的捆绑器工具失败,因为它试图重新捆绑已经捆绑的文件。 (#978, #982)

4.0.0 / 2017-05-26

版本 4.0.0

4.0.0

4.0 是 Chai 社区的一项巨大成果!为了确保 Chai 4 是一个稳定、可靠、文档齐全的代码库,我们做了很多改变。

  • 几乎所有文档都已重写,详细说明了断言的工作原理、可以使用哪些标志以及最佳实践。

  • 从头开始重写了深度相等性,以支持 ES6 类型(如 MapSet),并更好地支持现有类型。现在它比以前快得多,并且使我们能够在即将发布的版本中带来一些重大改进。

  • 我们确保 deep 标志现在 *只执行深度相等性*。以前,它有时也会用于测试嵌套属性(例如 expect(foo).to.have.deep.property('bar.baz'))。对于嵌套断言,请现在使用 .nested 标志。

  • 许多断言变得更加严格,这意味着你将获得更好的错误信息,解释问题出在哪里。在大多数情况下,这意味着不会出现以前没有错误信息的地方,但它将意味着更好的错误信息来代替有时难以理解的默认 TypeError 信息。

  • 我们添加了对常见错误和拼写错误的检测和有用的错误信息。在某些情况下,错误信息会将你指向文档,而在其他情况下,会建议你使用其他方法。这些信息将在未来的版本中继续得到改进,所以如果你有任何建议,请告诉我们!

重大变更

  • 我们不再支持 Node v0.10 和 v0.12(因为它们的 LTS 已结束)(PR: #816, #901)
  • 我们不再允许用户编写属性路径,**现在深度标志在与 .property 断言一起使用时执行深度相等性比较**。如果你想使用点或括号表示法来表示要断言的属性,**可以使用新的 .nested 标志**。(相关问题: #745, #743, PR: #758, #757)

    const obj = {a: 1};
    
    // The `.deep` flag now does deep equality comparisons
    expect({foo: obj}).to.have.deep.property('foo', {a: 1});
    
    // Use the `nested` flag if you want to assert against a nested property using the bracket or dot notation
    expect({foo: obj}).to.have.nested.property('foo.a', 1);
    
    // You can also use both flags combined
    const obj2 = {a: {b: 2}};
    expect({foo: obj2}).to.have.deep.nested.property('foo.a', {b: 2});
    

    请注意,使用 deep 标志的旧方法已重命名。它们都将 deep 一词改为 nested 一词。如果你想了解更多信息,请查看 #757。

  • 以前,expect(obj).not.property(name, val) 如果 obj 没有名为 name 的属性,则会抛出错误。此更改导致断言通过。 assert.propertyNotValassert.deepPropertyNotVal 断言分别被重命名为 assert.notPropertyValassert.notDeepPropertyVal(相关问题: #16, #743, #758)

  • 现在,你可以使用deep标志来执行.include断言,以便执行deep相等性检查,以查看某些内容是否包含在target中。以前,.include对非否定属性包含使用严格相等性(===),但对否定属性包含和数组包含使用deep相等性。**此更改导致 .include 断言始终使用严格相等性,除非设置了 deep 标志。**如果你想了解更多,请查看这条评论(相关问题:#743,PR:#760,#761)

    const obj = {a: 1};
    expect([obj]).to.deep.include({a:1});
    expect({foo: obj}).to.deep.include({foo: {a:1}});
    
  • 修复了NaN断言的不稳定行为。现在我们使用建议的 ES6 实现。新的实现现在更加正确、严格和简单。虽然旧的实现抛出了误报,但新的实现只检查某个值是否为NaN(或者如果使用.not标志,则检查是否不为NaN),除此之外不再进行其他操作。(相关问题:#498,#682,#681,PR:#508)

    // Only `NaN` will be considered to be `NaN` and nothing else
    expect(NaN).to.be.NaN;
    
    // Anything that is not `NaN` cannot be considered as `NaN`
    expect('randomString').not.to.be.NaN;
    expect(true).not.to.be.NaN;
    expect({}).not.to.be.NaN;
    expect(4).not.to.be.NaN;
    
  • 如果类型化数组类型太长(在这种情况下,如果它们超过了config上的truncateThreshold值),则现在将被截断。(相关问题:#441,PR:#576)

    var arr = [];
    for (var i = 1; i <= 1000; i++) {
      arr.push(i);
    }
    
    // The assertion below will truncate the diff shown and the enormous typed array will be shown as:
    // [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ...  ] instead of printing the whole typed array
    chai.expect(new Float32Array(100)).to.equal(1);
    
  • 断言:withinaboveleastbelowmostincreasedecrease如果断言的目标或参数不是数字,将抛出错误。(相关问题:#691,PR:#692,#796)

    // These will throw errors, for example:
    expect(null).to.be.within(0, 1);
    expect(null).to.be.above(10);
    expect(null).to.be.at.least(20);
    expect(null).to.be.below(20);
    expect(null).to.be.at.most(20);
    expect(null).to.increase.by(20);
    expect(null).to.decrease.by(20);
    
    // This will not:
    expect('string').to.have.a.lengthOf.at.least(3);
    
  • 以前,expect(obj).not.ownProperty(name, val)如果 obj 没有名为 name 的自有属性(非继承属性),将抛出错误。此更改导致断言通过。(相关问题:#795,#,PR:#744,#810)

    expect({ foo: 'baz' }).to.not.have.own.property('quux', 'baz');
    
  • 现在,当.empty断言传递非字符串的原始类型和函数时,它将抛出错误。(PR:#763,#812)

    // These will throw TypeErrors:
    expect(Symbol()).to.be.empty;
    expect(function() {}).to.be.empty;
    expect(true).to.be.empty;
    expect(1).to.be.empty
    
  • 断言主体(obj)在使用ownPropertyown.property时会发生变化,从而使链式调用成为可能。(相关问题:#281,PR:#641)

    expect({val: 20}).to.have.own.property('val').above(10);
    
  • 断言.change.increase.decrease从链式方法断言更改为方法断言。它们没有链式调用行为,而且链式调用它们没有通用的语义优势。(相关问题:#917,PR:#925)
// This will not work anymore because there is no benefit to chaining these assertions:
expect(function() {}).to.change.by(2)
expect(function() {}).to.increase.by(2)
expect(function() {}).to.decrease.by(2)
  • utils(传递给chai.use回调函数的第二个参数)不再导出getPathValue函数。如果你想使用它,请使用pathval模块,这是 chai 目前内部使用的模块。(相关问题:#457,#737,PR:#830)

  • 对于插件作者)如果要覆盖的方法为undefined,则在overwriteMethod上调用_super时抛出错误。目前,如果你尝试覆盖的方法没有定义,并且你的新方法调用_super,它将抛出Error(相关问题:#467,PR:#528)在此更改之前,调用_super将简单地返回this

    // Considering the method `imaginaryMethod` does not exist, this would throw an error for example:
    chai.use(function (chai, utilities) {
      chai.Assertion.overwriteMethod('imaginaryMethod', function (_super) {
        return function () {
          _super.apply(this, arguments);
        }
      });
    });
    
    // This will throw an error since you are calling `_super` which should be a method (in this case, the overwritten assertion) that does not exist
    expect('anything').to.imaginaryMethod(); 
    
  • 对于插件作者)现在,只要showDiff标志的值不是falseshowDiff默认情况下就会启用。这个问题主要会影响插件创建者或对核心进行扩展的任何人,因为它会影响Assertion.assert方法。(相关问题:#574,PR:#515)

    // Now whenever you call `Assertion.assert` with anything that is not false for the `showDiff` flag it will be true
    // The assertion error that was thrown will have the `showDiff` flag turned on since it was not passed to the `assert` method
    try {
      new chai.Assertion().assert(
          'one' === 'two'
        , 'expected #{this} to equal #{exp}'
        , 'expected #{this} to not equal #{act}'
        , 'one'
        , 'two'
      );
    } catch(e) {
      assert.isTrue(e.showDiff);
    }
    
    // The assertion error that was thrown will have the `showDiff` flag turned off since here we passed `false` explicitly
    try {
      new chai.Assertion().assert(
          'one' === 'two'
        , 'expected #{this} to equal #{exp}'
        , 'expected #{this} to not equal #{act}'
        , 'one'
        , 'two'
        , false
      );
    } catch(e) {
      assert.isFalse(e.showDiff);
    }
    

新功能

  • 在读取不存在的属性时抛出错误。(相关问题:#407,#766 PR:#721,#770)**这是一个可能存在重大变化的更改。如果你在属性断言中存在拼写错误,你的构建将会失败。**在4.x.x之前,当你使用属性断言时,如果你写错了它,它们不会抛出错误。例如,下面的示例将通过

    expect(true).to.be.ture; // Oops, typo, now Chai will throw an Error
    

    由于此实现依赖于 ES6Proxies,因此它只会在支持它的平台上运行。

    **可以通过config.useProxy属性启用(默认)或禁用此属性**,例如

    chai.config.useProxy = false;  // disable use of Proxy
    
  • 在代理模式下访问不存在的属性时添加修复建议。(相关问题:#771,PR:#782)在代理模式下访问不存在的属性时,Chai 将计算所有可能属性的莱文斯坦距离,以便为用户提供最佳的修复建议。

    expect(false).to.be.fals; // Error: Invalid Chai property: fals. Did you mean "false"?
    expect('foo').to.be.undefind; // Error: Invalid Chai property: undefind. Did you mean "undefined"?
    
    // If the Levenshtein distance between the word and any Chai property is greater than 4, no fix will be suggested
    expect('foo').to.be.fdsakfdsafsagsadgagsdfasf // error thrown, no fix suggested
    
  • 当不链式调用方法(包括被覆盖的不链式调用方法)被错误使用时,将抛出错误,并显示一个有帮助的错误消息。(PR:#789)

    expect(true).to.equal.true;  // Invalid Chai property: equal.true. See docs for proper usage of "equal".
    
  • 添加一个新的配置设置,描述在断言上检查不存在的属性并抛出错误之前,将忽略哪些键。由于此实现依赖于 ES6Proxies,因此它只会在支持它的平台上运行。此外,如果你禁用config.useProxy,此设置将不起作用。(相关问题:#765,PR:#774)

    chai.config.proxyExcludedKeys.push('nonExistingProp');
    
    expect('my string').to.nonExistingProp; // This won't throw an error now
    
  • 添加一个脚本,将 should 注册为副作用。(相关问题:#594,#693 PR:#604)

    // You can now write:
    import 'chai/should';
    
    // as opposed to:
    import {should} from 'chai';
    should();
    

    你也可以通过mocha选项注册 should:mocha --require chai/should

  • change断言接受函数作为对象。(相关问题:#544,PR:#607)

    // Now you can also check if the return value of a function changes, for example
    assert.increases(
      someOperation,
      () => getSomething().length
    )
    
  • 你也可以使用by断言与changeincreasedecrease断言一起断言 delta。(相关问题:#339,PR:#621)

  // You can use `.by` to assert the amount you want something to change
  var obj = { val: 10 };
  var increaseByTwo = function() { obj.val += 2 };
  var decreaseByTwo = function() { obj.val -= 2 };
  var increaseByThree = function() { obj.val += 3 };

  expect(increaseByThree).to.change(obj, 'val').by(3);
  expect(increaseByTwo).to.increase(obj, 'val').by(2);
  expect(decreaseByTwo).to.decrease(obj, 'val').by(2);

  // Please notice that if you want to assert something did change but not by some amount you need to use `.not` **after** the `change` related assertion
  // Take a look at the examples below:
  expect(increaseByThree).to.change(obj, 'val').but.not.by(5)
  expect(increaseByTwo).to.increase(obj, 'val').but.not.by(1)
  expect(decreaseByTwo).to.decrease(obj, 'val').but.not.by(1)
  • 现在.keys断言可以对mapset进行操作。(相关问题:#632,PR:#633,#668)
  // The `.keys` assertion now works on `map`s and `set`s natively, like the examples below:
  expect(new Map([[{objKey: 'value'}, 'value'], [1, 2]])).to.contain.key({objKey: 'value'});
  expect(new Map([[{objKey: 'value'}, 'value'], [1, 2]])).to.contain.any.keys([{objKey: 'value'}, {anotherKey: 'anotherValue'}]);
  expect(new Map([['firstKey', 'firstValue'], [1, 2]])).to.contain.all.keys('firstKey', 1);
  expect(new Set([['foo', 'bar'], ['example', 1]])).to.have.any.keys('foo');

  // You can also use `.deep` when asserting agains `Map`s and `Set`s
  expect(new Map([[{objKey: 'value'}, 'value'], [1, 2]])).to.contain.any.deep.keys([{objKey: 'value'}, {anotherKey: 'anotherValue'}]);
  expect(new Map([['firstKey', 'firstValue'], [1, 2]])).to.contain.all.deep.keys('firstKey', 1);
  expect(new Set([['foo', 'bar'], ['example', 1]])).to.have.any.deep.keys('foo');
  • 添加对严格模式的兼容性。(相关问题:#578,PR:#665)

    // This means you can now run your code with the `--use_strict` flag on Node
    // If want to understand more about this please read the issue related to this change
    
  • 添加doesbut作为新的空操作断言。(相关问题:#700,#339 PR:#621,#701)

    // You can now write assertions forming phrases with these two new words:
    expect(increaseByThree).to.change(obj, 'val').but.not.by(5);
    expect(foobar).to.have.property("baz").which.does.not.have.property("thing");
    
  • 允许使用新的 ES6 模块语法导入use(相关问题:#718,PR:#724)

    // You can now import `use` using the ES6 module syntax, like the example below:
    import sinonChai from "sinon-chai";
    import {expect, use} from "chai";
    
    use(sinonChai);
    

    你也可以使用require与新的 ES6 解构功能一起使用

    const sinonChai = require('sinon-chai');
    const {expect, use} = require("chai");
    
    use(sinonChai);
    
  • 为成员断言添加 ordered 标志。(相关问题:#717,PR:#728)

    // You can now use the `ordered` flag to assert the order of elements when using the `members` assertion:
    expect([1, 2, 3]).to.include.ordered.members([1, 2]); // This passes
    expect([1, 2, 3]).to.include.ordered.members([2, 3]); // This will fail! Read the docs to know more.
    
  • .property断言添加.own标志。它与.ownProperty的作用相同,不能与新的.nested标志一起使用。(相关问题:#795,PR:#810)

    expect({a: 1}).to.have.own.property('a');
    
    // The example below will thrown an Error
    expect({a: {b: 1}}).to.have.own.nested.property('a.b', 1);
    
  • .property断言添加.deep支持。(相关问题:#795,PR:#810)

    expect({ foo: { bar: 'baz' } }).to.have.deep.own.property('foo', { bar: 'baz' });
    expect({ foo: { bar: { baz: 'quux' } } }).to.have.deep.nested.property('foo.bar', { baz: 'quux' });
    
  • 现在.empty断言将与 ES6 集合一起使用。(PR:#763,#812,#814)请注意,当传递WeakMapWeakSet时,此断言将抛出错误。

    expect(new Set()).to.be.empty;
    expect(new Map()).to.be.empty;
    
    // The examples below will throw a TypeError:
    expect(new WeakSet()).to.be.empty;
    expect(new WeakMap()).to.be.empty;
    
  • 添加一个脚本,将should注册为副作用。此更改允许你通过 mocha 选项注册should,方法是使用:mocha spec.js -r chai/register-should,还可以让你在全局范围内注册测试风格。(问题:#693,PR:#868)

    require('chai/register-should');  // Using Should style
    
  • 添加一个脚本,将assert注册为副作用。此更改允许你通过 mocha 选项注册assert,方法是使用:mocha spec.js -r chai/register-assert(问题:#693,PR:#868,#872)

 require('chai/register-assert');  // Using Assert style
  • 添加一个脚本,将expect注册为副作用。此更改允许你通过 mocha 选项注册expect,方法是使用:mocha spec.js -r chai/register-expect(问题:#693,PR:#868,#872)

    require('chai/register-expect');  // Using Expect style
    
  • length断言直接链接到未调用的方法时,它会引用function的内置length属性,而不是 Chai 的length断言。此提交为 Chai 方法添加了一个保护措施,以检测此问题并抛出一个有帮助的错误消息,建议用户如何纠正它。(问题:#684,#841,PR:#897)

  • 在创建新的断言时,允许设置 lockSsfi 标志。此标志控制给定的 ssfi 标志是否应该保留其当前值,即使断言链接到此对象。通常在从另一个断言中创建新断言时将其设置为 true。在被覆盖的断言被覆盖断言调用之前,它也会暂时设置为 true(问题: #878, #904, PR: #922)

    // This will lock the stack stack function from this line on
    // The SSFI is the reference to the starting point for removing irrelevant frames from the stack trace
    new Assertion(obj, msg, ssfi, true).to.have.property('length')
    
  • nestedIncludedeepNestedIncludeownIncludedeepOwnInclude 断言及其否定对添加到 assert 接口中。(问题: #905, PR: #964)

    // '[]' and '.' in property names can be escaped using double backslashes.
    
    assert.nestedInclude({'.a': {'b': 'x'}}, {'\\.a.[b]': 'x'});
    assert.notNestedInclude({'.a': {'b': 'x'}}, {'\\.a.b': 'y'});
    
    assert.deepNestedInclude({a: {b: [{x: 1}]}}, {'a.b[0]': {x: 1}});
    assert.notDeepNestedInclude({a: {b: [{x: 1}]}}, {'a.b[0]': {y: 1}});
    
    assert.ownInclude({ a: 1 }, { a: 1 });
    assert.notOwnInclude({ a: 1 }, { b: 2 });
    
    assert.deepOwnInclude({a: {b: 2}}, {a: {b: 2}});
    assert.notDeepOwnInclude({a: {b: 2}}, {a: {c: 3}});
    

Bug 修复

  • 修复与更改相关的断言缺少 msg 参数的问题。(相关问题: 无, PR: #606)
  • addMethod 函数返回一个新的断言,其中标志被复制过来,而不是 this(相关问题: #562, #684, #723, PR: #642, #660)
  • 修复被覆盖属性和方法的堆栈跟踪。(相关问题: #659, #661)
  • 修复使用 should 语法测试 Symbol 等式时的错误。(相关问题: #669, PR: #672)
  • 修复断言某些有效的 ES6 键时的错误。(相关问题: #674, PR: #676)
  • 修复使用自定义 inspect 方法时发生的错误,该方法调用 stylize。(PR: #680)
  • 修复没有原型的对象的 ownProperty。(相关问题: #688, PR: #689)
  • 修复 .members 断言的预期结果和实际结果互换的问题。(相关问题: #511, PR: #702)
  • 修复 same.members 以正确处理重复项,将每个重复项视为一个独特的成员。(相关问题: #590, PR: #739)
  • 修复 deep.have.same.members(),它没有打印差异。(PR: #509)
  • 将显示 assert 的 equal 和 notEqual 方法的差异。(相关问题: #790, PR: #794)
  • 函数 overwriteMethodoverwritePropertyaddChainableMethodoverwriteChainableMethod 将返回带有复制标志的新断言,而不是 this。(相关问题: #562, #642, #791, PR: #799)
  • 与代理相关的实现框架显示在失败的属性断言的堆栈跟踪中。现在,我们通过设置代理 getter(而不是属性 getter)作为起点来删除所有实现框架,从而删除它们。(PR: #884)
  • 否定的 keys 断言现在将考虑集合的大小。(相关问题: #919, PR: #924)
  • 无论何时传递非函数实例的内容,instanceof 断言现在将抛出错误,通知用户应将构造函数传递给此断言,但实际上传递的是(相关问题: #893, PR: #924)
  • 修复 expect/should 接口上导致实现框架泄漏的所有问题。此外,改进内部 Chai 错误测试助手以验证堆栈跟踪。(问题: #878, #904, PR: #922)
  • 这修复了自定义消息并不总是被尊重的错误。(问题: #922, #947, #904, PR: #916, #923)
  • 修复 PhantomJS 1.x 不兼容问题(问题: #966, PR: #890)

4.0.0-canary.2 / 2017-04-17

版本 4.0.0-canary.2

4.0.0-canary.2 / 2017-04-17

4.0.0 canary 发布周期中的第二次发布。4 月底,除非出现任何重大错误,否则将发布为 4.0.0

重大变更

  • 我们已停止支持 Node 0.10 (参见 #816) 和 Node 0.12 (#901)。现在最低支持版本为 Node 4.0。如果你想继续使用旧版本的 Node 与 Chai,请继续使用 3.5.0 版本。正式发布的 Chai 4.0.0 版本支持 Node 4、6、7 以及正在移动的 LTS 版本(当前为 6.10.2)。我们计划至少支持 Node 4 直到 2018 年 4 月(与 Node Foundation 支持一致)。

  • .not.keys 本身现在相当于 .not.all.keys (#924)。文档中提到了这一点,并建议始终将 .keys 与其他内容配对。

新功能

  • 为每个接口添加了具有副作用的“register”风格脚本,(参见 #868)。这允许人们使用 require('chai/should'),它将自动调用 global.should = chai.should()。这对希望为其代码库自动获取全局变量的用户很有用。阅读文档了解更多信息

  • 在 package json 中添加了 browser 字段 (#875)。这将有助于浏览器捆绑工具。

  • 添加了 .own.include.nested.include (#926)。

  • 如果你尝试使用非构造函数(如 TypeError)调用 .throws,现在将收到有关此问题的更友好的错误消息。(以前会显示 Right-hand side of 'instanceof' is not an object,现在会显示 The instanceof assertion needs a constructor but <type> was given)。(#899)。

Bug 修复

  • 将 deep-eql 小幅更新到 2.0.1 (#871),它修复了与记忆有关的错误,并允许比较器覆盖对原语的评估。

  • 我们更新了使用 .length (#897) 方面的文档和错误处理 - 在某些情况下,这可能有问题。通常,你应该使用 .lengthOf 而不是 .length - 但现在文档对此进行了说明,并且错误在发生故障时更加有用。

  • 我们改进了堆栈跟踪,以剥离 Chai 的内部实现,尤其是在使用代理的较新环境中 (#884#922)。

  • 我们已经过了一遍并确保每个断言都尊重你传递给它的自定义错误消息 - 某些断言没有这样做!(#947)。

  • getFuncName 自我们在 4.0.0-canary.1 中提取行为后 (#915) 进行了更新。实际上,这不会改变 Chai 中的任何东西。

文档

  • 添加了 LICENSE 文件 (#854)
  • 对文档进行了重大改写,包括插件文档 (#911)、.throw 文档 (#866),以及几乎所有其他文档 (#920)。这些文档现在更加详细,解释了注意事项、算法和最佳实践。