自定义启动

如果你想自定义你的 jasmine 环境,你可以自定义你的 boot.js 文件。

boot.js 的核心应该保持不变,但你可以向界面添加新内容或通过修改此文件配置内容。

(function() {

  window.jasmine = jasmineRequire.core(jasmineRequire);

  jasmineRequire.html(jasmine);

  var env = jasmine.getEnv();

自定义界面

加载了核心 jasmine 界面后,你可以添加新函数或重写现有函数。

  var jasmineInterface = jasmineRequire.interface(jasmine, env);

在此,我们添加了一些别名,这样 before 就等同于 beforeEach

  jasmineInterface.before = jasmineInterface.beforeEach;

after 等同于 afterEach

  jasmineInterface.after = jasmineInterface.afterEach;

并且 context 等同于 describe

  jasmineInterface.context = jasmineInterface.describe;

  if (typeof window == "undefined" && typeof exports == "object") {
    extend(exports, jasmineInterface);
  } else {
    extend(window, jasmineInterface);
  }

添加自定义报告器

你还可以添加你自己的报告器,作为 jsApiReporterhtmlReporter 的补充或替代

  env.addReporter(jasmineInterface.jsApiReporter);

你还可以通过修改 env.specFilter 函数自定义从当前运行中过滤规范的方式

或者,在解析测试后通过将测试套件或规范 ID 数组传递给 execute 函数也可以指定要运行的规范。可以通过 env.topSuite() 访问解析测试树来收集这些 ID。

  var specFilter = new jasmine.HtmlSpecFilter({
    filterString: function() { return queryString.getParam("spec"); }
  });

  env.specFilter = function(spec) {
    return specFilter.matches(spec.getFullName());
  };

  window.setTimeout = window.setTimeout;
  window.setInterval = window.setInterval;
  window.clearTimeout = window.clearTimeout;
  window.clearInterval = window.clearInterval;

默认情况下,Jasmine 将在浏览器中触发 onload 事件时开始执行。替换此部分,如果你想等待其他内容后再调用 execute

  var currentWindowOnload = window.onload;

  window.onload = function() {
    if (currentWindowOnload) {
      currentWindowOnload();
    }
    env.execute(env.topSuite().id);
  };

辅助函数,将 Jasmine 公共接口添加到正确的对象。

  function extend(destination, source) {
    for (var property in source) destination[property] = source[property];
    return destination;
  }

}());