javascript – 使用Sinon.js测试navigator.browserLanguage或navigator.language

如何使用测试框架Sinon的sandbox.stub覆盖例如navigator.language或navigator.userAgent进行测试?

当我尝试使用以下内容时:

suite('agent', function () {
  var sandbox;
  setup(function () {
    // create sandbox environment for mocking about
    sandbox = sinon.sandbox.create();
  });
  teardown(function () {
    // restore the environment as it was before
    sandbox.restore();
  });
  test('language', function () {
    assert.equal(au.env.agent.language, navigator.language);
    if (!navigator.language) assert.equal(au.env.agent.language, 'de');
    var lang = "test_URK";
    sandbox.stub(window.navigator, 'language', lang);
    assert.equal(au.env.agent.language, lang);
  });
});

然后我会得到以下错误:不能存根不存在自己的属性语言:

这些存根中没有一个按预期工作:

> sandbox.stub(window.navigator,’language’,lang);
> sandbox.stub(navigator,’browserLanguage’,lang);

正在嘲笑导航器对象.

任何提示?

最佳答案
Mocking a useragent in javascript?所述,您可以:

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

或者更现代:

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

转载注明原文:javascript – 使用Sinon.js测试navigator.browserLanguage或navigator.language - 代码日志