ジャスミン仕様にマッチャーを追加する方法を示すドキュメントはたくさんあります(たとえば、ここ)。
環境全体にマッチャーを追加する方法を見つけた人はいますか。スペック全体にコピーパスタを使用せずに、すべてのテストで呼び出される便利なマッチャーのセットを作成したいと考えています。
現在、ソースのリバースエンジニアリングに取り組んでいますが、試行錯誤された真の方法が存在する場合はそれを優先します。
ジャスミン仕様にマッチャーを追加する方法を示すドキュメントはたくさんあります(たとえば、ここ)。
環境全体にマッチャーを追加する方法を見つけた人はいますか。スペック全体にコピーパスタを使用せずに、すべてのテストで呼び出される便利なマッチャーのセットを作成したいと考えています。
現在、ソースのリバースエンジニアリングに取り組んでいますが、試行錯誤された真の方法が存在する場合はそれを優先します。
もちろん、beforeEach()
スペックの範囲をまったく指定せずに電話をかけ、そこにマッチャーを追加します。
toBeOfType
これにより、マッチャーがグローバルに追加されます。
beforeEach(function() {
var matchers = {
toBeOfType: function(typeString) {
return typeof this.actual == typeString;
}
};
this.addMatchers(matchers);
});
describe('Thing', function() {
// matchers available here.
});
spec_helper.js
残りのスペックスイートを実行する前にページにロードする必要があるカスタムマッチャーなどでいっぱいの名前のファイルを作成しました。
これがジャスミン2.0+用のものです:
beforeEach(function(){
jasmine.addMatchers({
toEqualData: function() {
return {
compare: function(actual, expected) {
return { pass: angular.equals(actual, expected) };
}
};
}
});
});
これはangularのを使用することに注意してくださいangular.equals
。
編集:変更される可能性のある内部実装であるとは知りませんでした。自己責任。
jasmine.Expectation.addCoreMatchers(matchers)
以前の回答に基づいて、angular-cli用に次のセットアップを作成しました。マッチャーに外部モジュール(この場合はmoment.js)も必要です
注この例では、equalityTesterを追加しましたが、カスタマーマッチャーで機能するはずです。
src/spec_helper.ts
次の内容のファイルを作成します。
// Import module
import { Moment } from 'moment';
export function initSpecHelper() {
beforeEach(() => {
// Add your matcher
jasmine.addCustomEqualityTester((a: Moment, b: Moment) => {
if (typeof a.isSame === 'function') {
return a.isSame(b);
}
});
});
}
次に、src/test.ts
インポートでinitSpecHelper()
関数addを実行します。AngularのTestBedinitの前に配置しましたが、問題なく動作しているようです。
import { initSpecHelper } from './spec_helper';
//...
// Prevent Karma from running prematurely.
__karma__.loaded = function () {};
// Init our own spec helper
initSpecHelper();
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule,
platformBrowserDynamicTesting()
);
//...