Есть ли способ добавить Jasmine matcher во всю среду
Есть много документов, которые показывают, как добавить совпадение в спецификацию Жасмин (здесь).
Кто-нибудь нашел способ добавления помощников во всю среду; Я хочу создать набор полезных помощников, которые будут вызваны любыми и всеми тестами, без copypasta по всем моим спецификациям.
В настоящее время работает над обратным проектированием источника, но предпочла бы проверенный и истинный метод, если он существует.
Ответы
Ответ 1
Конечно, вы просто вызываете 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
Здесь один для жасмина 2.0 +:
beforeEach(function(){
jasmine.addMatchers({
toEqualData: function() {
return {
compare: function(actual, expected) {
return { pass: angular.equals(actual, expected) };
}
};
}
});
});
Обратите внимание, что это использует angular angular.equals
.
Ответ 3
Изменить: я не знал, что это внутренняя реализация, которая может быть изменена. Используйте на свой страх и риск.
jasmine.Expectation.addCoreMatchers(matchers)
Ответ 4
На основе предыдущих ответов я создал следующую настройку для angular -cli. Мне также нужен внешний модуль в моем матчи (в данном случае moment.js)
Примечание В этом примере я добавил идентификатор равенства, но он должен работать с клиентом
Создайте файл 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()
, добавьте ее выполнить. Я разместил его перед Angular TestBed init, который, кажется, работает нормально.
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()
);
//...