gpt4 book ai didi

javascript - Jasmine:如何在我的自定义匹配器中重用其他匹配器

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:44:13 26 4
gpt4 key购买 nike

我正在 Jasmine 中编写自定义匹配器(1.3,但问题也适用于 2.0),它扩展了内置匹配器的功能。如何调用内置匹配器使用另一个实际值?我尝试只执行 expect(otherActual).toEqual(expected),但这会返回 undefined。

我试过的实际代码:

var customMatchers = {
toHaveAttributes: function (expected) {
if(!this.actual) {
throw new Error("Test parameter is " + this.actual);
}
if(!(this.actual instanceof Backbone.Model)) {
throw new Error("Test parameter must be a Backbone Model");
}
var notText = this.isNot ? " not" : "";
var actualAttrs = this.actual.attributes;
this.message = function () {
return "Expected model to" + notText + " have attributes " + jasmine.pp(expected) +
", but was " + jasmine.pp(actualAttrs);
};
// return expect(actualAttrs).toEqual(expected); // Returns undefined
// return this.env.currentSpec.expect(actualAttrs).toEqual(expected); // Also returns undefined
return this.env.equals_(actualAttrs, expected); // Works, but copied from jasmine.Matchers.prototype.toEqual
}
}

匹配器是一个特定于 Backbone 的速记函数,用于检查模型的属性。我注释掉的两个返回行返回未定义。第三个返回有效,但它是复制粘贴代码并使用 jasmine 内部结构,因此很容易出错。

最佳答案

至少在 Jasmine 2.x 中,每个注册匹配器的工厂函数都可以在 jasmine.matchers 全局对象中找到。

要利用 toEqual 背后的功能,您可以编写

var toEqual = jasmine.matchers.toEqual();
var result = toEqual.compare('foo', 'bar');

在这种情况下,result 的值将是;

{
pass: false
}

因为 "foo" 不等于 "bar"

关于javascript - Jasmine:如何在我的自定义匹配器中重用其他匹配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23494471/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com