gpt4 book ai didi

javascript - Jasmine 的 toThrow 匹配器是否需要将参数包装在匿名函数中?

转载 作者:IT王子 更新时间:2023-10-29 03:12:28 25 4
gpt4 key购买 nike

文档位于 https://github.com/pivotal/jasmine/wiki/Matchers 包括以下内容:

expect(function(){fn();}).toThrow(e);

this question 中所述,下面的代码起作用,因为我们想传递一个函数对象给expect,而不是调用fn()的结果:

expect(fn()).toThrow(e);

以下是否有效?

expect(fn).toThrow(e);

如果我用 doIt 方法定义了一个对象 thing,下面的操作是否有效?

expect(thing.doIt).toThrow(e);

(如果是这样,有没有办法将参数传递给 doIt 方法?)

根据经验,答案似乎是肯定的,但我不相信我对 JavaScript 作用域的理解足够确定。

最佳答案

我们可以通过使用 Function.bind 来取消匿名函数包装器,它在 ECMAScript 5 中被引入。 .这适用于最新版本的浏览器,您可以通过自己定义函数来修补旧浏览器。 Mozilla Developer Network 中给出了示例定义.

这是一个如何将 bind 与 Jasmine 一起使用的示例。

describe('using bind with jasmine', function() {

var f = function(x) {
if(x === 2) {
throw new Error();
}
}

it('lets us avoid using an anonymous function', function() {
expect(f.bind(null, 2)).toThrow();
});

});

提供给 bind 的第一个参数在调用 f 时用作 this 变量。调用时,任何其他参数都会传递给 f。这里 2 作为第一个也是唯一的参数被传递。

关于javascript - Jasmine 的 toThrow 匹配器是否需要将参数包装在匿名函数中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9500586/

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