はい、それは少しハッキーですが、完全に可能です。
最初に行う必要があるのは、Jasmine.Envクラスを使用可能にすることです。とにかくすでにセットアップされているので、個人的にはSpecRunner.htmlでこれを実行しました。SpecRunnerをロードすると、次のスクリプトが実行されます。
(function() {
var jasmineEnv = jasmine.getEnv();
jasmineEnv.updateInterval = 1000;
var trivialReporter = new jasmine.TrivialReporter();
jasmineEnv.addReporter(trivialReporter);
jasmineEnv.specFilter = function(spec) {
return trivialReporter.specFilter(spec);
};
var currentWindowOnload = window.onload;
window.onload = function() {
if (currentWindowOnload) {
currentWindowOnload();
}
execJasmine();
};
function execJasmine() {
jasmineEnv.execute();
};
})();
したがって、execJasmine関数宣言の後で、次を追加してjasmineEnvをグローバル名前空間にプッシュします。
this.jasmineEnv = jasmineEnv;
これで、どのスペックファイルでも、jasmineEnv変数にアクセスできます。これには、マッチャーのコアコードが含まれています。
toEqualを具体的に見ると、toEqualはjasmine.Env.prototype.equals_関数を呼び出します。これは、customMatcherで次のことを実行できることを意味します。
beforeEach(function(){
this.addMatchers({
isJasmineAwesome : function(expected){
return jasmineEnv.equals_(this.actual, expected);
}
});
});
残念ながら、この方法を使用すると、次の方法にしかアクセスできなくなります。
- compareObjects_
- equals_
- contains_
残りのマッチャーはjasmine.Matchersクラスに常駐していますが、まだ公開できていません。これが何らかの形であなたを助けることを願っています