我正在尝试为Jasmine测试框架编写测试,该测试期望出现错误.目前我正在使用GitHub的Jasmine Node.js集成.
在我的Node模块中,我有以下代码:
throw new Error("Parsing is not possible");
Run Code Online (Sandbox Code Playgroud)
现在我尝试编写一个期望这个错误的测试:
describe('my suite...', function() {
[..]
it('should not parse foo', function() {
[..]
expect(parser.parse(raw)).toThrow(new Error("Parsing is not possible"));
});
});
Run Code Online (Sandbox Code Playgroud)
我也试过了Error()一些其他的变种,只是无法弄清楚如何使它工作.
https://github.com/pivotal/jasmine/wiki/Matchers上的文档包括以下内容:
expect(function(){fn();}).toThrow(e);
Run Code Online (Sandbox Code Playgroud)
正如在讨论这个问题,下面就无法工作,因为我们想要一个函数对象传递给expect,而不是调用的结果fn()
expect(fn()).toThrow(e);
Run Code Online (Sandbox Code Playgroud)
问题1:以下工作如何?
expect(fn).toThrow(e);
Run Code Online (Sandbox Code Playgroud)
问题2:如果我thing用方法定义了一个对象,doIt下面的工作是否正常?
expect(thing.doIt).toThrow(e);
Run Code Online (Sandbox Code Playgroud)
(2a:如果是这样,有没有办法将参数传递给doIt方法?)
根据经验,答案似乎是肯定的,但我不相信我对js范围的理解足以确定.
谢谢!