Да, это немного странно, но вполне возможно.
Первое, что нам нужно сделать, - это сделать класс 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_
- равно_
- содержит_
Остальные совпадения находятся в классе jasmine.Matchers, но я пока не смог сделать это открытым.Я надеюсь, что это так или иначе поможет вам