【问题标题】:Troubles with testing delete value from object on different browsers在不同浏览器上测试对象删除值的问题
【发布时间】:2015-12-18 13:25:23
【问题描述】:

我需要测试从哈希中删除:

store = { 'a': 4 }
delete store['a']
expect(store['a']).toBeUndefined()

此测试在 chrome 上通过,但在 Firefox 中未通过。我明白了:

Expected null not to be defined.

如何避免这个错误?

【问题讨论】:

    标签: javascript google-chrome firefox coffeescript jasmine


    【解决方案1】:

    您正在测试错误的条件,因此 Chrome 和 Firefox 返回的值是否不同并不重要(但请参见下文)。考虑一下:

    store = { a: 11 }
    store['a'] = undefined
    

    这将为您提供store['a'],即undefined,但store 仍将有'a' 作为键。

    如果您想检查 delete 是否删除了该属性,请准确地说:

    expect('a' of store).toBe(false)
    

    CoffeeScript 的 of 运算符是 JavaScript 的 in 运算符,来自 fine manual

    与已删除或未定义的属性一起使用

    如果使用 delete 运算符删除属性,in 运算符会为该属性返回 false。
    [...]
    如果您将属性设置为 undefined 但不删除它,in 运算符会为该属性返回 true

    这正是您要测试的行为。


    作为记录,当我说:

    store = { 'a': 4 }
    delete store['a']
    console.log store['a']
    

    我在最新的 Firefox 中得到undefined

    【讨论】:

    • firefox 说我用的是最新版本的firefox...这看起来很有趣
    • 我从jsfiddle.net/ambiguous/dm2scgf4 处得到相同的结果,你呢?如果你这样做了,你能在 jsfiddle.net 或 jsbin.com 上复制你的问题吗?
    猜你喜欢
    • 1970-01-01
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多