有点奇怪,这不是基本功能
您可以像这样添加自定义匹配器:
JasmineExtensions.js
yourGlobal.addExtraMatchers = function () {
var addMatcher = function (name, func) {
func.name = name;
jasmine.matchers[name] = func;
};
addMatcher("toBeGreaterThanOrEqualTo", function () {
return {
compare: function (actual, expected) {
return {
pass: actual >= expected
};
}
};
}
);
};
实际上,您正在为匹配器定义一个构造函数 - 它是一个返回匹配器对象的函数。
在“启动”之前将其包含在内。基本匹配器在启动时加载。
您的 html 文件应如下所示:
<!-- jasmine test framework-->
<script type="text/javascript" src="lib/jasmine-2.0.0/jasmine.js"></script>
<script type="text/javascript" src="lib/jasmine-2.0.0/jasmine-html.js"></script>
<!-- custom matchers -->
<script type="text/javascript" src="Tests/JasmineExtensions.js"></script>
<!-- initialisation-->
<script type="text/javascript" src="lib/jasmine-2.0.0/boot.js"></script>
然后在您的 boot.js 中添加调用以在定义 jasmine 之后但在 jasmine.getEnv() 之前添加匹配器。 Get env 实际上是一个(有点误导性的)设置调用。
匹配器在 Env 构造函数的 setupCoreMatchers 调用中得到设置。
/**
* ## Require & Instantiate
*
* Require Jasmine's core files. Specifically, this requires and attaches all of Jasmine's code to the `jasmine` reference.
*/
window.jasmine = jasmineRequire.core(jasmineRequire);
yourGlobal.addExtraMatchers();
/**
* Since this is being run in a browser and the results should populate to an HTML page, require the HTML-specific Jasmine code, injecting the same reference.
*/
jasmineRequire.html(jasmine);
/**
* Create the Jasmine environment. This is used to run all specs in a project.
*/
var env = jasmine.getEnv();
他们展示了在示例测试中添加自定义匹配器的另一种方法,但是它的工作方式是在每次测试之前使用 beforeEach 重新创建匹配器。这看起来很可怕,所以我想我会改用这种方法。