Подтвердить что ты не робот

Есть ли способ добавить Jasmine matcher во всю среду

Есть много документов, которые показывают, как добавить совпадение в спецификацию Жасмин (здесь).

Кто-нибудь нашел способ добавления помощников во всю среду; Я хочу создать набор полезных помощников, которые будут вызваны любыми и всеми тестами, без copypasta по всем моим спецификациям.

В настоящее время работает над обратным проектированием источника, но предпочла бы проверенный и истинный метод, если он существует.

4b9b3361

Ответ 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()
);

//...