リリース履歴

v5.1.1

バージョン v5.1.1

変更点

  • JSDoc コメント用に ESLint を設定(@koddsson による)https://github.com/chaijs/chai/pull/1605
  • build(deps-dev): ip を 1.1.8 から 1.1.9 に更新 (@dependabot による) https://github.com/chaijs/chai/pull/1608
  • Mocha のインポート手順を修正(@MattiSG による)https://github.com/chaijs/chai/pull/1611
  • fix: toThrow でいくつかの仮想コンテキストをサポート(@43081j による)https://github.com/chaijs/chai/pull/1609

新しい貢献者

  • @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
  • jsdoc コメントをクリーンアップ (@koddsson による) https://github.com/chaijs/chai/pull/1596
  • 「法的なコメント」形式のコメントを jsdoc または通常のコメントに変換(@koddsson による)https://github.com/chaijs/chai/pull/1598
  • iterable アサーションを実装(@koddsson による)https://github.com/chaijs/chai/pull/1592
  • アサートインターフェースの修正(@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): nanoid と mocha を更新 (@dependabot による) https://github.com/chaijs/chai/pull/1558
  • bump-cli を削除(@koddsson による)https://github.com/chaijs/chai/pull/1559
  • 開発者向け依存関係を更新(@koddsson による)https://github.com/chaijs/chai/pull/1560
  • fix: node 互換性のため (5.x) ?? を削除 (@43081j による) https://github.com/chaijs/chai/pull/1576
  • loupe を最新バージョンに更新(@koddsson による)https://github.com/chaijs/chai/pull/1579
  • いくつかの webkit テストを再度有効にする(@koddsson による)https://github.com/chaijs/chai/pull/1580
  • test/should.js で大量の if 文を削除(@koddsson による)https://github.com/chaijs/chai/pull/1581
  • 大量の未使用ファイルを削除(@koddsson による)https://github.com/chaijs/chai/pull/1582
  • 1564 を修正 (@koddsson による) https://github.com/chaijs/chai/pull/1566

完全な変更履歴: https://github.com/chaijs/chai/compare/v5.0.1…v5.0.2

v4.4.1

バージョン v4.4.1

変更点

  • fix: node 互換性のため ?? を削除 (@43081j による) https://github.com/chaijs/chai/pull/1574

完全な変更履歴: https://github.com/chaijs/chai/compare/v4.4.0…v4.4.1

v4.4.0

バージョン v4.4.0

変更点

  • deepEqual 関数をグローバルに構成できるようにする (4.x.x ブランチ) (@forty による) https://github.com/chaijs/chai/pull/1553

完全な変更履歴: https://github.com/chaijs/chai/compare/v4.3.10…v4.4.0

v5.0.0-rc.0

バージョン v5.0.0-rc.0

chai@v5 の最初のリリース候補が登場!

いくつかのアルファバージョンをリリースし、さまざまなプロジェクトでテストしたところ、良好な結果が得られました。この RC には、これらの変更と、それ以降に発見された修正が含まれています。

プロジェクトで試してみて、何か問題が発生した場合はお知らせください。バージョン 5 の前に修正を行うことができます!

Chai をご利用いただきありがとうございます 🙏🏻

変更点

  • feat: インスペクションに chaijs/loupe を使用 (@pcorpet による) https://github.com/chaijs/chai/pull/1401
  • docs: README の URL を修正 (@Izzur による) https://github.com/chaijs/chai/pull/1413
  • get-func-name 依存関係を削除(@koddsson による)https://github.com/chaijs/chai/pull/1416
  • Makefile スクリプトを npm スクリプトに変換(@koddsson による)https://github.com/chaijs/chai/pull/1424
  • README バッジをクリーンアップ(@koddsson による)https://github.com/chaijs/chai/pull/1422
  • fix: package.json - exports フィールドの非推奨警告 (@stevenjoezhang による) https://github.com/chaijs/chai/pull/1400
  • fix: deep-eql パッケージをシンボルをサポートするように更新 (@snewcomer による) https://github.com/chaijs/chai/pull/1458
  • ES モジュール変換 PoC (@43081j による) https://github.com/chaijs/chai/pull/1498
  • chore: commonjs のサポートを削除 (@43081j による) https://github.com/chaijs/chai/pull/1503
  • pathval を更新(@koddsson による)https://github.com/chaijs/chai/pull/1527
  • check-error を更新(@koddsson による)https://github.com/chaijs/chai/pull/1528
  • deep-eql を最新バージョンに更新 (@koddsson による) https://github.com/chaijs/chai/pull/1542
  • type-detect を単純な関数としてインライン化(@koddsson による)https://github.com/chaijs/chai/pull/1544
  • loupe を更新(@koddsson による)https://github.com/chaijs/chai/pull/1545
  • タイプミス「Test and object」を「Test an object」に修正(@mavaddat による)https://github.com/chaijs/chai/pull/1460
  • assertion-error を最新のメジャーバージョンに更新! (@koddsson による) https://github.com/chaijs/chai/pull/1543
  • Karma を Web Test Runner に置き換える(@koddsson による)https://github.com/chaijs/chai/pull/1546
  • codecov を削除(@koddsson による)https://github.com/chaijs/chai/pull/1548
  • chai バージョン定数を削除(@koddsson による)https://github.com/chaijs/chai/pull/1550
  • istanbul を削除(@koddsson による)https://github.com/chaijs/chai/pull/1549

新しい貢献者

  • @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 です。これらのバージョンより前のブラウザのサポートは「ベストエフォート」(古いブラウザでのバグレポートは個別に評価され、wontfix とマークされる可能性があります)です。

変更点

  • feat: インスペクションに chaijs/loupe を使用 (@pcorpet による) https://github.com/chaijs/chai/pull/1401
  • docs: README の URL を修正 (@Izzur による) https://github.com/chaijs/chai/pull/1413
  • get-func-name 依存関係を削除(@koddsson による)https://github.com/chaijs/chai/pull/1416
  • Makefile スクリプトを npm スクリプトに変換(@koddsson による)https://github.com/chaijs/chai/pull/1424
  • README バッジをクリーンアップ(@koddsson による)https://github.com/chaijs/chai/pull/1422
  • fix: package.json - exports フィールドの非推奨警告 (@stevenjoezhang による) https://github.com/chaijs/chai/pull/1400
  • fix: deep-eql パッケージをシンボルをサポートするように更新 (@snewcomer による) https://github.com/chaijs/chai/pull/1458
  • ES モジュール変換 PoC (@43081j による) https://github.com/chaijs/chai/pull/1498
  • chore: commonjs のサポートを削除 (@43081j による) https://github.com/chaijs/chai/pull/1503
  • pathval を更新(@koddsson による)https://github.com/chaijs/chai/pull/1527
  • check-error を更新(@koddsson による)https://github.com/chaijs/chai/pull/1528
  • deep-eql を最新バージョンに更新 (@koddsson による) https://github.com/chaijs/chai/pull/1542
  • type-detect を単純な関数としてインライン化(@koddsson による)https://github.com/chaijs/chai/pull/1544
  • loupe を更新(@koddsson による)https://github.com/chaijs/chai/pull/1545
  • タイプミス「Test and object」を「Test an object」に修正(@mavaddat による)https://github.com/chaijs/chai/pull/1460
  • assertion-error を最新のメジャーバージョンに更新! (@koddsson による) https://github.com/chaijs/chai/pull/1543
  • Karma を Web Test Runner に置き換える(@koddsson による)https://github.com/chaijs/chai/pull/1546

新しい貢献者

  • @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

変更点

  • deep-eql を最新バージョンに更新 (@koddsson による) https://github.com/chaijs/chai/pull/1542
  • type-detect を単純な関数としてインライン化(@koddsson による)https://github.com/chaijs/chai/pull/1544
  • loupe を更新(@koddsson による)https://github.com/chaijs/chai/pull/1545
  • タイプミス「Test and object」を「Test an object」に修正(@mavaddat による)https://github.com/chaijs/chai/pull/1460
  • assertion-error を最新のメジャーバージョンに更新! (@koddsson による) https://github.com/chaijs/chai/pull/1543
  • Karma を Web Test Runner に置き換える(@koddsson による)https://github.com/chaijs/chai/pull/1546

完全な変更履歴: 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: GitHub のコミットログへのリンクを修正(@bugwelle による)https://github.com/chaijs/chai/pull/1487
  • build(deps): socket.io-parser を 4.0.4 から 4.0.5 に更新 (@dependabot による) https://github.com/chaijs/chai/pull/1488
  • test.js の小さなタイプミス (@mavaddat による) https://github.com/chaijs/chai/pull/1459
  • docs: objDisplay の戻り値の型を指定 (@scarf005 による) https://github.com/chaijs/chai/pull/1490
  • CONTRIBUTING.md を更新 (@matheus-rodrigues00 による) https://github.com/chaijs/chai/pull/1521
  • Fix: exports.version を現在のバージョンに更新 (@peanutenthusiast による) https://github.com/chaijs/chai/pull/1534

新しい貢献者

  • @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: commonjs のサポートを削除 (@43081j による) https://github.com/chaijs/chai/pull/1503
  • pathval を更新(@koddsson による)https://github.com/chaijs/chai/pull/1527
  • check-error を更新(@koddsson による)https://github.com/chaijs/chai/pull/1528

完全な変更履歴: 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 の最初のアルファリリースです。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: deep-eql パッケージをシンボル比較をサポートするように更新 (@snewcomer による) https://github.com/chaijs/chai/pull/1483

完全な変更履歴: https://github.com/chaijs/chai/compare/v4.3.6…v4.3.7

バージョン v4.3.6

loupe を 2.3.1 に更新

バージョン v4.3.5

  • chaijs fca5bb1 をビルド
  • build(deps-dev): codecov を 3.1.0 から 3.7.1 に更新 (#1446) 747eb4e
  • 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

これにより、mjs ファイルでのエクスポートとして Assertion が再度導入されます。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 が CVE-2020-7751 を修正するために 1.1.1 に更新されることが保証されます。

4.3.0 / 2021-02-04

バージョン 4.3.0

これはマイナーリリースです。

前回のリリース以降、多くの変更はありませんが、このリリースには非常に重要な変更 (#1257) が含まれており、jest ユーザーがより良い diff を取得できるようになります。このリリース以降、jest ユーザーは、diff でどの演算子が使用されたかを確認できるようになります。アサーションが失敗した場合にスローされる AssertionError のプロパティであるoperator。このフラグは、どのような比較が行われたかを示します。

これはプラグインのメンテナーにとっても重要な変更です。プラグインのメンテナーは、operator flag にアクセスできるようになり、getOperatorというユーティリティメソッドを通じてアクセスできます。

このリリースに貢献してくれた素晴らしいすべての人々に感謝します。

新機能

  • contain.oneOf が可能な値の配列を受け取れるようにする (@voliva)
  • アサーションエラーに operator 属性を追加 (#1257) (@rpgeeganage)
  • closeTo のエラーメッセージが、delta が必要な場合にユーザーに通知するようになる (@eouw0o83hf)

ドキュメント

  • oneOf ドキュメントに contains フラグを追加 (@voliva)

テスト

  • useProxy 設定が overwriteProperty でチェックされることを確認する (@vieiralucas)
  • contain.oneOf のテストを追加 (@voliva )

雑務

  • mocha をバージョン 6.1.4 にアップデート
  • node v10 および v12 を ci に追加 (@vieiralucas)
  • node v4、v6 および v9 のサポートを終了 (@vieiralucas)
  • ヘッドレス chrome 用の sauce 設定を修正 (@meeber)
  • 開発依存関係をアップデート (@meeber)
  • phantomjs 依存関係を削除 (#1204)

4.2.0 / 2018-09-25

バージョン 4.2.0

これはマイナーリリースです。貢献者とユーザーの皆様に感謝します!

新機能

  • feat(アサーション): 'still' 言語チェーンを追加 (#1194; @ScottRudiger)
  • Map と Set の .lengthOf (#1110, #1131; @asbish)
  • feat: assert.fail([message]) インターフェースを追加 (#1116, #1117; @s-leroux)

バグ修正

  • fix: .deep.equal スタックから Chai フレームを削除 (#1124; @meeber)
  • 'catch' キーワードを proxyExcludedKeys に追加 (#1050, #1101; @generalandrew)
  • property アサーションは、ネストされている場合にのみ文字列を受け入れるべき (#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)
  • パッケージ 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

このリリースでは、特定の環境で実行した場合のバグを修正し、いくつかのマイナーなドキュメント修正が含まれています。

バグ修正

  • fix: deep-eql をバージョン 3.0.0 にアップデート (#1020)
  • fix: 厳格な CSP 下での破損を引き起こすコードを置き換え (#1032; @Alhadis)

ドキュメント

  • docs: 不足している assert パラメータを追加 (#1017, #1023; @Hpauric)
  • docs: ライセンスファイルの年をアップデート (#1025; @yanca018)

4.1.1 / 2017-08-05

バージョン 4.1.1

このリリースには、いくつかのバグとドキュメントの修正が含まれています。

バグ修正

  • 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

このリリースには、1 つの新機能といくつかのバグ修正が含まれています。

新機能

  • ES6 コレクションのサポートを include() に追加 (#970, #994; @shvaikalesh)

バグ修正

  • isBelow および isAbove アサーションで日付を許可 (#980, #990; @v1adko)
  • fix: .property アサーションでターゲットの型をチェック (#992; @meeber)

雑務

  • lgtm.com によって発見された不足している var キーワードを追加 (#988; @samlanning)
  • refactor: expectTypesssfi フラグにアクセスするように修正 (#993; @meeber)
  • CODEOWNERS を作成 (#1004; @keithamus)

4.0.2 / 2017-06-05

バージョン 4.0.2

WebPack 1 ユーザー向けのいくつかの問題を解決した、別のバグ修正リリースがあります。

バグ修正

  • package.json からバージョン情報を取得するのを元に戻します。一部のバンドラーツール (Webpack など) は、Node がこれを処理できるにもかかわらず、デフォルトで json ローダーが付属していません。この変更により、コードベースでバージョン番号をハードコーディングすることに戻ります。(#985, #986)

4.0.1 / 2017-05-31

バージョン 4.0.1

4.0.1

もちろん、メジャーリリースは直後にクイックバグ修正リリースなしには進めることはできません。それがこちらです!

バグ修正

  • 誤って追加され、すでにバンドルされたファイルをリバンドルしようとしたため、Browserify や Webpack などのバンドラーツールが失敗した package.json browser フィールドを削除します。(#978, #982)

4.0.0 / 2017-05-26

バージョン 4.0.0

4.0.0

4.0 は chai コミュニティによる大規模な取り組みでした! Chai 4 が安定し、信頼性が高く、十分に文書化されたコードベースであることを保証するために、多くの変更が行われました。主要な改善点をいくつか紹介します。

  • ほとんどすべてのドキュメントが書き直され、アサーションの仕組み、組み合わせることができるフラグ、およびそれらの使用に関するベストプラクティスに関する詳細な手順が記載されています。

  • 深い等価性は、MapSet などの ES6 型をサポートし、既存の型をより良くサポートするように、一から書き直されました。また、以前よりもはるかに高速になり、今後のリリースでいくつかの大きな改善をもたらすことができます。

  • deep フラグが常に深い等価性のみを行うようにしました。以前は、ネストされたプロパティをテストするためにも使用されていました (たとえば、expect(foo).to.have.deep.property('bar.baz'))。ネストされたアサーションの場合は、.nested フラグを使用してください。

  • 多くのアサーションがより厳格になり、問題が発生した場所を説明するより良いエラーメッセージが表示されるようになりました。ほとんどの場合、これは以前はエラーメッセージがなかった場所にエラーメッセージが表示されることを意味するのではなく、場合によっては曖昧なデフォルトの TypeError メッセージを置き換えるより良いエラーメッセージが表示されることを意味します。

  • 一般的な間違いやタイプミスに対する検出と役立つエラーメッセージを追加しました。エラーメッセージは、場合によってはドキュメントを指し示したり、別の方法を示唆したりします。これらのメッセージは今後のリリースで引き続き改善されるため、何か提案があればお知らせください!

破壊的変更

  • Node v0.10 および v0.12 は、LTS が終了したため、サポートされなくなりました (PR: #816, #901)。
  • ユーザーがプロパティのパスを記述できるようにする代わりに、.property アサーションで使用すると、deep フラグは深い等価比較を実行するようになりました。ドットまたはブラケット表記を使用してアサートするプロパティを示す古い動作が必要な場合は、新しい .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});
    

    assert インターフェースで deep フラグの古い動作を使用していた古いメソッドは名前が変更されたことに注意してください。それらはすべて deep という単語が nested という単語に変更されています。これについて詳しく知りたい場合は、#757 をご覧ください。

  • 以前は、expect(obj).not.property(name, val) は、objname という名前のプロパティを持たない場合にエラーをスローしていました。この変更により、代わりにアサーションが成功するようになります。assert.propertyNotVal および assert.deepPropertyNotVal アサーションは、それぞれ assert.notPropertyVal および assert.notDeepPropertyVal にリネームされました。(関連Issue: #16, #743, #758)

  • ターゲットに何かが含まれているかどうかを確認するために、.include アサーションで deep フラグを使用して、deep な等価性チェックを実行できるようになりました。以前は、.include は、否定されていないプロパティの包含には厳密な等価性 (===) を使用していましたが、否定されたプロパティの包含と配列の包含には deep な等価性を使用していました。この変更により、deep フラグが設定されていない限り、.include アサーションは常に厳密な等価性を使用するようになります。詳細については、このコメントをご覧ください。(関連Issue: #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 フラグが使用されている場合はそうでないかどうか) のみを確認し、それ以外は何も確認しません。(関連Issue: #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;
    
  • Typed Array 型は、長すぎる場合 (この場合は、configtruncateThreshold 値を超える場合) に切り捨てられるようになりました。(関連Issue: #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 は、アサーションのターゲットまたは引数が数値でない場合にエラーをスローします。(関連Issue: #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 という名前の独自のプロパティ (継承されていないプロパティ) を持たない場合にエラーをスローしていました。この変更により、代わりにアサーションが成功するようになります。(関連Issue: #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
    
  • ownProperty または own.property を使用すると、アサーションの対象 (obj) が変更され、チェーンが可能になります。(関連Issue: #281, PR: #641)

    expect({val: 20}).to.have.own.property('val').above(10);
    
  • .change.increase、および .decrease アサーションは、チェーン可能なメソッドアサーションからメソッドアサーションに変更されました。これらはチェーン動作がなく、それらをチェーンすることに一般的な意味上の利点はありません。(関連Issue: #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 コールバック関数に渡される 2 番目の引数) は、getPathValue 関数をエクスポートしなくなりました。それを使用したい場合は、pathval モジュールを使用してください。これは chai が内部で使用するものです。(関連Issue: #457, #737, PR: #830)

  • (プラグイン作成者向け) オーバーライドされるメソッドが undefined の場合、overwriteMethod_super を呼び出すとスローします。現在、オーバーライドしようとしているメソッドが定義されておらず、新しいメソッドが _super を呼び出すと、Error がスローされます。(関連Issue: #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 フラグが false 以外の場合は常に、showDiff がデフォルトでオンになりました。この問題は、主にプラグイン作成者またはコアの拡張機能を作成した人に影響します。これは、Assertion.assert メソッドに影響するためです。(関連Issue: #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);
    }
    

新機能

  • 存在しないプロパティが読み取られるとスローします。(関連Issue: #407, #766 PR: #721, #770) これは潜在的に破壊的な変更です。プロパティアサーションにタイプミスがあると、ビルドが失敗します。4.x.x より前は、プロパティアサーションを使用した場合、誤って記述してもエラーはスローされませんでした。たとえば、以下の例は成功します。

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

    この実装は ES6 Proxies に依存しているため、それをサポートするプラットフォームでのみ機能します。

    このプロパティは、config.useProxy プロパティを介して有効 (デフォルト) または無効にできます。たとえば

    chai.config.useProxy = false;  // disable use of Proxy
    
  • プロキシモードで存在しないプロパティにアクセスするときに修正候補を追加します。(関連Issue: #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".
    
  • アサーションで存在しないプロパティをチェックするときにエラーをスローする前に無視されるキーを記述する新しい構成設定を追加します。この実装は ES6 Proxies に依存しているため、それをサポートするプラットフォームでのみ機能します。また、config.useProxy を無効にすると、この設定は効果がありません。(関連Issue: #765, PR: #774)

    chai.config.proxyExcludedKeys.push('nonExistingProp');
    
    expect('my string').to.nonExistingProp; // This won't throw an error now
    
  • should を副作用として登録するスクリプトを追加します。(関連Issue: #594, #693 PR: #604)

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

    また、mocha オプション: mocha --require chai/should を介して should を登録することもできます。

  • change アサーションは、オブジェクトとして関数を受け入れます。(関連Issue: #544, PR: #607)

    // Now you can also check if the return value of a function changes, for example
    assert.increases(
      someOperation,
      () => getSomething().length
    )
    
  • また、changeincrease および decrease アサーションと一緒に by アサーションを使用してデルタをアサートすることもできます。(関連Issue: #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 で動作するようになりました。(関連Issue: #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');
  • 厳密モードとの互換性を追加します。(関連Issue: #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
    
  • does および but を新しいノーオペレーションアサーションとして追加します。(関連Issue: #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 をインポートできるようにします。(関連Issue: #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);
    

    また、新しい ES6 分割代入機能とともに require を使用することもできます。

    const sinonChai = require('sinon-chai');
    const {expect, use} = require("chai");
    
    use(sinonChai);
    
  • メンバーアサーションに順序付きフラグを追加します。(関連Issue: #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 フラグと一緒には使用できません。(関連Issue: #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 サポートを追加します。(関連Issue: #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) このアサーションに WeakMap または WeakSet が渡されると、エラーが発生することに注意してください。

    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 を使用してください。また、テストスタイルをグローバルに登録することもできます。(Issue: #693, PR: #868)

    require('chai/register-should');  // Using Should style
    
  • assert を副作用として登録するスクリプトを追加しました。この変更により、mocha オプションを使用して assert を登録できます。mocha spec.js -r chai/register-assert を使用してください。(Issue: #693, PR: #868, #872)

 require('chai/register-assert');  // Using Assert style
  • expect を副作用として登録するスクリプトを追加しました。この変更により、mocha オプションを使用して expect を登録できます。mocha spec.js -r chai/register-expect を使用してください。(Issue: #693, PR: #868, #872)

    require('chai/register-expect');  // Using Expect style
    
  • length アサーションが、未呼び出しのメソッドから直接チェーンされている場合、Chai の length アサーションではなく、function の組み込み length プロパティを参照していました。このコミットでは、この問題を検出し、ユーザーに修正方法をアドバイスするのに役立つエラーメッセージをスローするように、Chai メソッドにガードを追加しました。(Issue: #684, #841, PR: #897)

  • 新しい Assertion を作成するときに lockSsfi フラグを設定できるようにしました。このフラグは、このオブジェクトからアサーションがチェーンされても、指定された ssfi フラグが現在の値を保持するかどうかを制御します。これは通常、別のアサーション内から新しいアサーションを作成するときに true に設定されます。また、オーバーライドされたアサーションがオーバーライドするアサーションによって呼び出される前に、一時的に true に設定されます。(Issue: #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')
    
  • nestedIncludedeepNestedIncludeownInclude、および deepOwnInclude アサーションと、それらの否定ペアが assert インターフェースに追加されました。(Issue: #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}});
    

バグ修正

  • 変更関連のアサーションに関する msg 引数の欠落を修正しました。(関連 Issue: なし, PR: #606)
  • addMethod 関数は、this の代わりに、フラグがコピーされた新しいアサーションを返します。(関連 Issue: #562, #684, #723, PR: #642, #660)
  • オーバーライドされたプロパティとメソッドのスタックトレースを修正しました。(関連 Issue: #659, #661)
  • should 構文で Symbol の等価性をテストするときのバグを修正しました。(関連 Issue: #669, PR: #672)
  • いくつかの有効な ES6 キーをアサートするときのバグを修正しました。(関連 Issue: #674, PR: #676)
  • カスタム inspect メソッドが使用され、このメソッドが stylize を呼び出す場合に発生するバグを修正しました。(PR: #680)
  • プロトタイプがないオブジェクトの ownProperty を修正しました。(関連 Issue: #688, PR: #689)
  • .members アサーションの期待される結果と実際の結果が入れ替わっていたのを修正しました。(関連 Issue: #511, PR: #702)
  • same.members が、各重複をユニークなメンバーとして扱うことで、重複を適切に処理するように修正しました。(関連 Issue: #590, PR: #739)
  • diff が出力されなかった deep.have.same.members() を修正しました。(PR: #509)
  • assert の equal メソッドと notEqual メソッドで diff が表示されるようになります。(関連 Issue: #790, PR: #794)
  • overwriteMethod, overwriteProperty, addChainableMethod, overwriteChainableMethod 関数は、this の代わりに、フラグがコピーされた新しいアサーションを返すようになります。(関連 Issue: #562, #642, #791, PR: #799)
  • プロキシ関連の実装フレームが、プロパティのアサーションが失敗したときのスタックトレースに表示されていました。ここで、すべての実装フレームを削除するための開始点としてプロキシゲッター(プロパティゲッターの代わりに)を設定することにより、それらを削除します。(PR: #884)
  • 否定された keys アサーションがセットのサイズを考慮するようになります。(関連 Issue: #919, PR: #924)
  • 関数インスタンスではないものが渡されるたびに、instanceof アサーションは、このアサーションにコンストラクターを渡すべきであり、代わりに渡されたものを通知するエラーをスローするようになりました。(関連 Issue: #893, PR: #924)
  • 実装フレームが漏洩していた expect/should インターフェース上のすべての問題を修正しました。また、スタックトレースを検証するために、内部の Chai エラーテストヘルパーを改善しました。(Issue: #878, #904, PR: #922)
  • これで、カスタムメッセージが常に尊重されない問題を修正します。(Issue: #922, #947, #904, PR: #916, #923)
  • PhantomJS 1.x の非互換性を修正しました。(Issue: #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 カナリアリリースサイクルにおける2回目のリリースです。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)をサポートしています。少なくとも 2018 年 4 月まで(Node Foundation のサポートに合わせて)Node 4 をサポートする予定です。

  • .not.keys は、現在 .not.all.keys と同等です(#924)。ドキュメントにはこのことが記載されており、常に .keys を何かと組み合わせるように推奨しています。

新機能

  • 各インターフェースに副作用のある「登録」スタイルのスクリプトを追加しました(#868 参照)。これにより、require('chai/should') を使用できます。これにより、global.should = chai.should() が自動的に呼び出されます。これは、コードベースのグローバルを自動的に取得したいユーザーに役立ちます。詳細については、ドキュメントを参照してください

  • package.json に browser フィールドを追加しました(#875)。これは、ブラウザバンドルツールに役立ちます。

  • .own.include.nested.include を追加しました(#926)。

  • コンストラクターではないもの(TypeError など)を使用して .throws を呼び出そうとすると、これに関するより役立つエラーメッセージが表示されるようになりました。(以前は、'instanceof' の右辺はオブジェクトではありません と表示されていたのが、現在は instanceof アサーションにはコンストラクターが必要ですが、<type> が渡されました と表示されるようになりました。)(#899)。

バグ修正

  • deep-eql を 2.0.1 にマイナーアップデートしました(#871)。これにより、メモ化に関するバグが修正され、コンパレータがプリミティブの評価をオーバーライドできるようになります。

  • .length の使用に関するドキュメントとエラー処理を更新しました(#897)。これは、場合によっては問題になる可能性があります。通常は、代わりに .lengthOf を使用する必要がありますが、ドキュメントではこれが明確になり、問題が発生した場合のエラーがより役立つようになりました。

  • 特にプロキシを使用する新しい環境で、chai の内部処理を削除するようにスタックトレースを改善しました(#884 および #922)。

  • すべてのアサーションが、渡されたカスタムエラーメッセージを尊重するように確認しました - 一部のものはそうではありませんでした! (#947)。

  • getFuncName は、4.0.0-canary.1 で動作を引き抜いたため、更新されました (#915)。実際には、これは Chai に何も変更を加えません。

ドキュメント

  • LICENSE ファイルを追加しました (#854)
  • プラグインのドキュメント (#911), .throw のドキュメント (#866)、そして、他のほとんどすべてのドキュメント (#920) を含む、主要なドキュメントの書き直しを行いました。これらのドキュメントは現在、より詳細になり、注意点、アルゴリズム、ベストプラクティスを説明しています。