Jasmine的toThrow匹配器是否要求将参数包含在匿名函数中? [英] Does Jasmine's toThrow matcher require the argument to be wrapped in an anonymous function?

查看:136
本文介绍了Jasmine的toThrow匹配器是否要求将参数包含在匿名函数中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

https://github.com/pivotal/jasmine/wiki/Matchers <上的文档/ a>包括以下内容:

The documentation at https://github.com/pivotal/jasmine/wiki/Matchers includes the following:

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

这个问题,以下工作,因为我们想传递一个函数对象期望而不是调用 fn()的结果

As discussed in this question, the following does not work because we want to pass a function object to expect rather than the result of calling fn()

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

问题1:以下工作是否有效?

Question 1: Does the following work?

expect(fn).toThrow(e);

问题2:如果我已经定义了一个对象的东西使用方法 doIt ,是否有以下工作?

Question 2: If I've defined an object thing with a method doIt, does the following work?

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

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

(2a: if so, is there a way to pass arguments to the doIt method?)

根据经验,答案似乎是肯定的,但我不相信我对js范围的理解足以确定。

Empirically the answer seems to be yes but I don't trust my understanding of js scoping quite enough to be sure.

谢谢!

推荐答案

我们可以取消匿名功能使用<$ h $ => http://www.ecma-international.org/publications/files/ECMA-ST/ECMA中引入的 Function.bind 包装器-262.pdfrel =noreferrer> ECMAScript 5 。这适用于最新版本的浏览器,您可以通过自己定义功能来修补旧浏览器。 Mozilla Developer Network <给出了一个示例定义/ a>。

We can do away with the anonymous function wrapper by using Function.bind, which was introduced in ECMAScript 5. This works in the latest versions of browsers, and you can patch older browsers by defining the function yourself. An example definition is given at the Mozilla Developer Network.

以下是 bind 如何与Jasmine一起使用的示例。

Here's an example of how bind can be used with 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 被调用时,作为这个变量。调用时,任何其他参数都会传递给 f 。这里 2 作为第一个也是唯一的参数传递。

The first argument provided to bind is used as the this variable when f is called. Any additional arguments are passed to f when it is invoked. Here 2 is being passed as its first and only argument.

这篇关于Jasmine的toThrow匹配器是否要求将参数包含在匿名函数中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆