У меня есть простая потребность: использовать свои собственные пользовательские сопоставители в модульных тестах Jasmine в рамках проекта Angular CLI (Angular v6).
Пара ограничений:
- Я не хочу ничего изменять под node_modules; этот проект должен пройти через мой конвейер сборки, который каждый раз выполняет чистую установку.
- Я не хочу создавать модуль npm только для того, чтобы можно было добавить к
types
в tsconfig.spec.json.
На данный момент я могу различить, что мне нужен файл .d.ts, так что это мои matchers.d.ts:
/// <reference path="../../../node_modules/@types/jasmine/index.d.ts" />
declare namespace jasmine {
interface Matchers<T> {
toContainPath(path: string): boolean;
}
}
В той же директории у меня есть файл matchers.ts:
export const customMatchers: jasmine.CustomMatcherFactories = {
// Affirms the element contains a sub-element at the given CSS path.
toContainPath: function (_util, _customEqualityTesters) {
return {
compare: function (element: HTMLElement, path: string) {
const result = {
pass: false,
message: ''
};
if (!element) {
result.message = 'Expected element to be non-empty';
} else if (!path) {
result.message = 'Expected path to be non-empty';
} else {
result.pass = element.querySelector(path) !== null;
result.message =
'Expected ' + element + (result.pass ? ' not' : '') + ' to contain ' + path;
}
return result;
}
};
}
};
В моем тестовом (spec) файле у меня есть:
import { customMatchers } from 'app/testing/matchers';
. . .
/// <reference path="../../../testing/matchers.d.ts" />
. . .
beforeEach(() => {
jasmine.addMatchers(customMatchers);
. . .
и, наконец, я использую средство сравнения во включенных тестах, например ::
expect(element).toContainPath('my-sidebar');
Я также попытался добавить полный путь к matchers.d.ts в массив types
в файле tsconfig.spec.json.
Увы, я не смог найти решение, которое работает. Ошибка продолжает проявляться как
error TS2339: Property 'toContainPath' does not exist on type 'Matchers<HTMLElement>'
Многообещающие места, которые я искал, но безрезультатно:
- нестандартные жасминовые спички
- добавление определения TypeScript для жасминового сопоставления
- жасминовые сопоставители
- тестирование углового с пользовательскими сопоставлениями
- добавить файл набора текста в TypeScript
Кто-нибудь может предложить секретный соус?