Jasmine 在 expect().toThrow 上抛出错误,而不是识别抛出的错误
Jasmine throws error on expect().toThrow instead of identifying the thrown error
我在 javascript 学习测试驱动开发的过程中尝试实现打印钻石的功能。
Diamond.prototype.outerSpace = function (current, widest) {
var currentValue = this.getIndexOf(current);
var widestValue = this.getIndexOf(widest);
if (currentValue > widestValue) {
throw new Error('Invalid combination of arguments');
}
var spaces = widestValue - currentValue;
return new Array(spaces + 1).join(' ');
};
我在错误处理方面遇到问题。如果 currentValue 大于 widestValue,上面的函数应该抛出一个错误。
这是我代表 test/spec 的片段:
it ("should throw an exception, if it is called with D and C", function () {
var outerSpace = diamond.outerSpace.bind(diamond, 'D', 'C');
expect(outerSpace).toThrow('Invalid combination of arguments');
});
我也尝试过在 expect(..) 中使用匿名函数,但这也没有用。
控制台消息是:预期函数抛出 'Inval...' 但它抛出错误:参数组合无效。
我不明白,我应该如何处理这些信息。
编辑:这很奇怪,因为它与 Jasmine v.1.3 一起工作,但它不能与 jasmine v.2.3 一起工作,即或与业力一起工作,尽管代码基于 jasmine。
TL;DR
在 Jasmine 2 中,匹配器的语义发生了变化,并且有一个新的匹配器。
使用toThrowError("<message>")
或toThrow(new Error("<message>")))
NTL;TR
自从 Jasmine 2.x 有了新的匹配器 toThrowError()
并且 Jasmine 的 toThrow()
有了新的语义。
toThrow()
应该用于检查 是否有任何错误被抛出 或检查 Error
的消息(更具体的是:某事是 instanceof Error
)
toThrowError()
应该用于检查是否抛出了 特定的 错误,或者错误消息是否等于预期
在内部 toThrow(x)
对抛出的错误与 x
进行相等性检查。如果错误和 x
都是 instanceof Error
(例如 TypeError
也是如此)Jasmine 检查双方的相等性(===
通常)message
属性。
表单toThrowError(x)
检查错误信息是否等于或匹配x
(字符串或正则表达式)
另一种形式 toThrowError(t, x)
检查错误的类型是否为 t
并且消息是否等于或匹配 x
(字符串或正则表达式)
见
我在 javascript 学习测试驱动开发的过程中尝试实现打印钻石的功能。
Diamond.prototype.outerSpace = function (current, widest) {
var currentValue = this.getIndexOf(current);
var widestValue = this.getIndexOf(widest);
if (currentValue > widestValue) {
throw new Error('Invalid combination of arguments');
}
var spaces = widestValue - currentValue;
return new Array(spaces + 1).join(' ');
};
我在错误处理方面遇到问题。如果 currentValue 大于 widestValue,上面的函数应该抛出一个错误。
这是我代表 test/spec 的片段:
it ("should throw an exception, if it is called with D and C", function () {
var outerSpace = diamond.outerSpace.bind(diamond, 'D', 'C');
expect(outerSpace).toThrow('Invalid combination of arguments');
});
我也尝试过在 expect(..) 中使用匿名函数,但这也没有用。
控制台消息是:预期函数抛出 'Inval...' 但它抛出错误:参数组合无效。
我不明白,我应该如何处理这些信息。
编辑:这很奇怪,因为它与 Jasmine v.1.3 一起工作,但它不能与 jasmine v.2.3 一起工作,即或与业力一起工作,尽管代码基于 jasmine。
TL;DR
在 Jasmine 2 中,匹配器的语义发生了变化,并且有一个新的匹配器。
使用toThrowError("<message>")
或toThrow(new Error("<message>")))
NTL;TR
自从 Jasmine 2.x 有了新的匹配器 toThrowError()
并且 Jasmine 的 toThrow()
有了新的语义。
toThrow()
应该用于检查 是否有任何错误被抛出 或检查Error
的消息(更具体的是:某事是instanceof Error
)toThrowError()
应该用于检查是否抛出了 特定的 错误,或者错误消息是否等于预期
在内部 toThrow(x)
对抛出的错误与 x
进行相等性检查。如果错误和 x
都是 instanceof Error
(例如 TypeError
也是如此)Jasmine 检查双方的相等性(===
通常)message
属性。
表单toThrowError(x)
检查错误信息是否等于或匹配x
(字符串或正则表达式)
另一种形式 toThrowError(t, x)
检查错误的类型是否为 t
并且消息是否等于或匹配 x
(字符串或正则表达式)
见