Angular.js: 在澳大利亚运行时,单元测试失败

创建于 2013-11-19  ·  14评论  ·  资料来源: angular/angular.js

我收到此评论中报告的相同错误: https :

我也在澳大利亚/悉尼。

我可以跳过--force ,但是最好能拿出一份干净的健康证明以作贡献!

Chrome 31.0.1650 (Mac OS X 10.9.0) ngMock TzDate should fake getHours method FAILED
    Expected 4 to be 3.
    Error: Expected 4 to be 3.
        at null.<anonymous> (/Users/brett/scm/github/angular.js/test/ngMock/angular-mocksSpec.js:60:29)
    Expected 1 to be 0.
    Error: Expected 1 to be 0.
        at null.<anonymous> (/Users/brett/scm/github/angular.js/test/ngMock/angular-mocksSpec.js:64:29)
    Expected 22 to match 21.
    Error: Expected 22 to match 21.
        at null.<anonymous> (/Users/brett/scm/github/angular.js/test/ngMock/angular-mocksSpec.js:68:29)
ngMock moderate investigation broken expected use bug

最有用的评论

在澳大利亚运行测试时,我得到了类似的堆栈跟踪信息:

(92:86:sɾ˙ɔǝdssʞɔoɯ-ɹɐlnƃuɐ/ʞɔoɯƃu/ʇsǝʇ/sɾ˙ɹɐlnƃuɐ/qnɥʇıƃ/ɯɔs/ʇʇǝɹq/sɹǝsn/) <snoɯʎuouɐ>˙llnu ʇɐ        
˙12 ɥɔʇɐɯ oʇ 22 pǝʇɔǝdxǝ :ɹoɹɹǝ    
˙12 ɥɔʇɐɯ oʇ 22 pǝʇɔǝdxǝ    
(92:46:sɾ˙ɔǝdssʞɔoɯ-ɹɐlnƃuɐ/ʞɔoɯƃu/ʇsǝʇ/sɾ˙ɹɐlnƃuɐ/qnɥʇıƃ/ɯɔs/ʇʇǝɹq/sɹǝsn/) <snoɯʎuouɐ>˙llnu ʇɐ        
˙0 ǝq oʇ 1 pǝʇɔǝdxǝ :ɹoɹɹǝ    
˙0 ǝq oʇ 1 pǝʇɔǝdxǝ    
(92:06:sɾ˙ɔǝdssʞɔoɯ-ɹɐlnƃuɐ/ʞɔoɯƃu/ʇsǝʇ/sɾ˙ɹɐlnƃuɐ/qnɥʇıƃ/ɯɔs/ʇʇǝɹq/sɹǝsn/) <snoɯʎuouɐ>˙llnu ʇɐ        
˙3 ǝq oʇ 4 pǝʇɔǝdxǝ :ɹoɹɹǝ    
˙3 ǝq oʇ 4 pǝʇɔǝdxǝ    
pǝlıɐɟ poɥʇǝɯ sɹnoɥʇǝƃ ǝʞɐɟ plnoɥs ǝʇɐpzʇ ʞɔoɯƃu (0˙9˙01 x so ɔɐɯ) 0561˙0˙13 ǝɯoɹɥɔ

(认真地说,我将问题分配给我自己,并将进行查看)

所有14条评论

也许我们应该添加地理位置信息来拉取请求?

在澳大利亚运行测试时,我得到了类似的堆栈跟踪信息:

(92:86:sɾ˙ɔǝdssʞɔoɯ-ɹɐlnƃuɐ/ʞɔoɯƃu/ʇsǝʇ/sɾ˙ɹɐlnƃuɐ/qnɥʇıƃ/ɯɔs/ʇʇǝɹq/sɹǝsn/) <snoɯʎuouɐ>˙llnu ʇɐ        
˙12 ɥɔʇɐɯ oʇ 22 pǝʇɔǝdxǝ :ɹoɹɹǝ    
˙12 ɥɔʇɐɯ oʇ 22 pǝʇɔǝdxǝ    
(92:46:sɾ˙ɔǝdssʞɔoɯ-ɹɐlnƃuɐ/ʞɔoɯƃu/ʇsǝʇ/sɾ˙ɹɐlnƃuɐ/qnɥʇıƃ/ɯɔs/ʇʇǝɹq/sɹǝsn/) <snoɯʎuouɐ>˙llnu ʇɐ        
˙0 ǝq oʇ 1 pǝʇɔǝdxǝ :ɹoɹɹǝ    
˙0 ǝq oʇ 1 pǝʇɔǝdxǝ    
(92:06:sɾ˙ɔǝdssʞɔoɯ-ɹɐlnƃuɐ/ʞɔoɯƃu/ʇsǝʇ/sɾ˙ɹɐlnƃuɐ/qnɥʇıƃ/ɯɔs/ʇʇǝɹq/sɹǝsn/) <snoɯʎuouɐ>˙llnu ʇɐ        
˙3 ǝq oʇ 4 pǝʇɔǝdxǝ :ɹoɹɹǝ    
˙3 ǝq oʇ 4 pǝʇɔǝdxǝ    
pǝlıɐɟ poɥʇǝɯ sɹnoɥʇǝƃ ǝʞɐɟ plnoɥs ǝʇɐpzʇ ʞɔoɯƃu (0˙9˙01 x so ɔɐɯ) 0561˙0˙13 ǝɯoɹɥɔ

(认真地说,我将问题分配给我自己,并将进行查看)

如果愿意去澳大利亚旅行的话,我愿意亲自处理:)

新西兰也有同样的问题。

我不太明白为什么会这样。 TzDate模拟是专门为时区不可知的。

我们会根据您的本地设置计算偏移量,然后将日期调整为在所有时区相同。 参见: https :

我不明白为什么在澳大利亚和新西兰以外的所有时区都可以正常工作。 有任何想法吗?

@IgorMinar未来的你好! 考虑到这一点,这似乎是DST问题(如果我要移居布里斯班而不进行DST的情况,则测试通过了)。 感谢您的指导,这是一个有用的线索。 我会整理一个拉取请求。

实际上,在进一步研究中,这看起来不像是角度测试中的错误-也许是一个固有的问题。 DST于1971年在澳大利亚开始,因此UNIX时代是UTC + 10 1/1/70(UTC + 10)。

但是,在使用负偏移的测试中,时区为+11而不是+10。 这也可以在节点中看到:

$ node
> new Date(0)
Thu Jan 01 1970 10:00:00 GMT+1000 (EST)
> new Date(-36000000)
Thu Jan 01 1970 01:00:00 GMT+1100 (EST)
> new Date(1970, 0, 1)
Thu Jan 01 1970 00:00:00 GMT+1100 (EST)
> new Date(1970, 0, 1, 1, 0, 0)
Thu Jan 01 1970 01:00:00 GMT+1100 (EST)

在我无法控制的条件下,结果似乎发生了巨大的变化-Safari甚至对于新的Date(0)都将其弄错了,并且在某些我无法复制的条件下,有些Chrome标签页(但不是像业力中那样是新的)正确地执行了。

有一种解决方法:更改测试以转换不会变为负数的日期。 这有点矛盾,但似乎并没有使测试无效-希望那是可以接受的吗?

我相信这是由于ES5 15.9.1.8(https://es5.github.io/#x15.9.1.8)引起的。

“ ECMAScript的实现不应尝试确定确切的时间是否受夏时制约束,而应确定如果当时使用了当前的夏时制算法,那么夏时制是否会生效。这避免了诸如此类的复杂性考虑到语言环境全年观察夏令时的时间。

如果宿主环境提供了确定夏时制的功能,则ECMAScript的实现可以自由地将相关年份映射到宿主环境为其提供的等效年份(相同的leap年和该年份的相同的起始日)。夏令时信息。 唯一的限制是所有等效年份都应产生相同的结果。”

在本地时区调整方面,不同的JS引擎对<1970年以下的日期的处理方式不同。 有些引擎将<1970年映射为更现代的年份,这可以解释为什么您看到DST的适用日期,即使当时澳大利亚没有遵守DST。

请参阅: https : https://bugzilla.mozilla.org/show_bug.cgi?id=1029923

+1

哈哈(对不起)

来自HN.YC。 这很好笑! :D哈哈

+1-有史以来最好的错误报告!

+1澳大利亚获得了摘要循环。

规范似乎是一个问题,显然,问题是,应该如何解决–正如ECMAscript规范指出,当今的DST应该应用于过去的几年,而其他编程语言(尤其是用户)则期望不同的行为。

要么有人必须在Date周围编写一个包装器,以正确实现以前的DST数据并解决问题,否则就需要找到其他解决方案。 我不知道哪种方法更可取,但是对于用户而言,当前的解决方案肯定令人困惑。

此页面是否有帮助?
0 / 5 - 0 等级