37

ジャスミン仕様にマッチャーを追加する方法を示すドキュメントはたくさんあります(たとえば、ここ)。

環境全体にマッチャーを追加する方法を見つけた人はいますか。スペック全体にコピーパスタを使用せずに、すべてのテストで呼び出される便利なマッチャーのセットを作成したいと考えています。

現在、ソースのリバースエンジニアリングに取り組んでいますが、試行錯誤された真の方法が存在する場合はそれを優先します。

4

4 に答える 4

48

もちろん、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残りのスペックスイートを実行する前にページにロードする必要があるカスタムマッチャーなどでいっぱいの名前のファイルを作成しました。

于 2012-08-13T20:54:15.607 に答える
14

これがジャスミン2.0+用のものです:

beforeEach(function(){
  jasmine.addMatchers({
    toEqualData: function() {
      return {
        compare: function(actual, expected) {
          return { pass: angular.equals(actual, expected) };
        }
      };
    }
  });
});

これはangularのを使用することに注意してくださいangular.equals

于 2015-04-24T09:35:28.267 に答える
0

編集:変更される可能性のある内部実装であるとは知りませんでした。自己責任。

jasmine.Expectation.addCoreMatchers(matchers)
于 2017-04-25T05:45:39.210 に答える
0

以前の回答に基づいて、angular-cli用に次のセットアップを作成しました。マッチャーに外部モジュール(この場合はmoment.js)も必要です

この例では、equalityTesterを追加しましたが、カスタマーマッチャーで機能するはずです。

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()関数addを実行します。AngularのTestBedinitの前に配置しましたが、問題なく動作しているようです。

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()
);

//...
于 2017-06-19T08:47:35.363 に答える