Javascript 特定测试中的模拟导航器语言

Javascript 特定测试中的模拟导航器语言,javascript,jasmine,navigator,Javascript,Jasmine,Navigator,我正在使用Jasmine测试JavaScript代码,我想知道是否有办法为特定测试设置导航器语言(或浏览器语言)?如中所述,您可以: navigator.__defineGetter__('language', function(){ return 'foo'; }); 或者,您可以使用更现代的: Object.defineProperty(navigator, 'language', { get: function() {return 'bar';}

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

如中所述,您可以:

  navigator.__defineGetter__('language', function(){
      return 'foo';
  });
或者,您可以使用更现代的:

  Object.defineProperty(navigator, 'language', {
      get: function() {return 'bar';}
  });
来自@abendigo的命令有效,但当您试图两次否决属性时,它确实会显示“无法重新定义属性”

在他链接到的列表中,他们建议添加
可配置:true
,因此:

Object.defineProperty(navigator, 'language', {
  get: function() { return 'bar'; }, // Or just get: () => 'bar',
  configurable: true
});
顺便说一句,getter不是必须的,您还可以使用值表示法:

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

随着时间的推移,我遇到了这个问题:试图更改不可配置属性的访问机制。defineProperty@[native code]此处出现类似错误:TypeError:无法重新定义属性:函数处的语言。defineProperty()对象。在这种情况下,define将不起作用,因为
导航器
只读且该属性不可配置,即它的
可配置属性设置为false。