Используйте Jasmine custom matcher с проектом Angular CLI - PullRequest
0 голосов
/ 21 января 2019

У меня есть простая потребность: использовать свои собственные пользовательские сопоставители в модульных тестах 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>'

Многообещающие места, которые я искал, но безрезультатно:

  1. нестандартные жасминовые спички
  2. добавление определения TypeScript для жасминового сопоставления
  3. жасминовые сопоставители
  4. тестирование углового с пользовательскими сопоставлениями
  5. добавить файл набора текста в TypeScript

Кто-нибудь может предложить секретный соус?

1 Ответ

0 голосов
/ 24 января 2019

Два ответа здесь вместе сработали для меня!

Создание пользовательского сопоставления жасмина с использованием Typescript

Добавил index.ts в папку тестирования и сделал имена файлов .ts и .d.ts разными (например, custom-matchers.ts и matchers-types.d.ts).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...