【发布时间】:2017-07-28 15:21:48
【问题描述】:
Jasmine 的文档很短;通常就足够了。并非总是如此。
我想知道toBeCloseTo的第二个参数到底是什么。官方参考仅供参考:
it("The 'toBeCloseTo' matcher is for precision math comparison", function() {
var pi = 3.1415926, e = 2.78;
expect(pi).not.toBeCloseTo(e, 2);
expect(pi).toBeCloseTo(e, 0);
});
好的,它是精确的,但在这种情况下,“精确”实际上意味着什么?是“。”后面的位数吗?应该是一样的吧?
我的情况:我想以毫秒为单位比较两个时间戳;如果它们之间的差异小于100,那对我来说很好。
例如,在以下情况下,X 的值是多少?
var timestamp1 = 1501254807000;
var timestamp2 = 1501254807099;
var timestamp3 = 1501254807100;
var precision = X;
expect(timestamp1).toBeCloseTo(timestamp2, precision); //this should pass
expect(timestamp1).toBeCloseTo(timestamp3, precision); //this should NOT pass
如果精度只针对十进制数,我可以将整数除以 1000 得到十进制数,但无论如何,我不知道 X 是什么。 目前,我是这样做的:
expect(Math.abs(timestamp2-timestamp1)).toBeLessThan(100);
但它的可读性不是很好,我想使用 toBeCloseTo(因为它存在...)。
谢谢
编辑。以下结果可能会有所帮助:
expect(1000000.005).toBeCloseTo(1000000.000,3); //fails
expect(1000000.005).toBeCloseTo(1000000.000,2); //fails
expect(1000000.005).toBeCloseTo(1000000.000,1); //pass
【问题讨论】:
-
文档说“要检查的小数点数。”
-
顺便说一句,我添加了一个新示例,这似乎与 Nikolaj 报告的文档不相符
-
谷歌给我带来了:jasmine.github.io/2.0/introduction.html - 这是我知道的关于 Jasmine 的唯一文档/参考 :) 无论如何他们给出的例子(我在我的问题)至少很奇怪。有人可能会问为什么,如果精度为 2,则示例中的变量 pi 和 e 不接近,而如果精度为 0,则它们接近。 @fatLewis 查看源代码?文档应该做得很好,为了不需要查看这些细节的来源,我认为......
-
我通常会同意文档,但匹配器代码非常短(不到 40 行)并且有 JSDoc 标签。我稍后会写一个答案,但@Nikolaj 是正确的。
标签: javascript angularjs unit-testing jasmine