有没有一种方法,以茉莉花匹配添加到整个环境(Is there a way to add a Jasm

2019-06-27 01:13发布

有很多的,显示了如何将匹配添加到茉莉花规范(文件在这里 ,例如)。

有没有人找到了一种方法来匹配器添加到整个环境; 我想创建一套有用的匹配,以任何和所有的测试被调用,而不copypasta都在我的规格。

目前正致力于逆向工程的源头,而是希望有一个尝试和真正的方法,如果存在的话。

Answer 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充分的,如自定义的匹配的事情,我只需要在我运行规范套件的其余部分加载到页面上。



Answer 2:

这里有一个茉莉花2.0+:

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

请注意,这里使用的角度的angular.equals



Answer 3:

编辑:我不知道这是可以经历改变内部实现。 使用您自己的风险。

jasmine.Expectation.addCoreMatchers(matchers)


Answer 4:

基于以前的答案,我创建了角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()函数中添加执行它。 我把它角的测试床初始化之前,至极似乎工作就好了。

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

//...


文章来源: Is there a way to add a Jasmine matcher to the whole environment