【问题标题】:Mock navigator language in specific tests特定测试中的模拟导航器语言
【发布时间】:2016-08-02 19:21:51
【问题描述】:

我正在使用 Jasmine 测试 JavaScript 代码,我想知道是否有办法为特定测试设置导航器语言(或浏览器语言)?

【问题讨论】:

    标签: javascript jasmine navigator


    【解决方案1】:

    如Mocking a useragent in javascript? 中所述,您可以:

      navigator.__defineGetter__('language', function(){
          return 'foo';
      });
    

    或者,您可以使用更现代的:

      Object.defineProperty(navigator, 'language', {
          get: function() {return 'bar';}
      });
    

    【讨论】:

    • 随着更现代,我遇到了这个问题:尝试更改不可配置属性的访问机制。 defineProperty@[本机代码]
    • 此处出现类似错误:TypeError:无法重新定义属性:Function.defineProperty () 处的语言
    • Object.define 在这种情况下不起作用,因为navigator 只读并且该属性是不可配置的,即configurable 属性设置为false。
    【解决方案2】:

    来自@abendigo 的answer 有效,但当您尝试两次否决该属性时,它确实会显示“无法重新定义属性”。

    在他链接的post中,他们建议添加configurable: true,所以:

    Object.defineProperty(navigator, 'language', {
      get: function() { return 'bar'; }, // Or just get: () => 'bar',
      configurable: true
    });
    

    顺便说一句,getter 不是必须的,你也可以使用值表示法:

    Object.defineProperty(navigator, 'language', {
      value: 'bar',
      configurable: true
    });
    

    【讨论】:

      猜你喜欢
      • 2013-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-24
      • 1970-01-01
      • 2016-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多