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

DoK*_*DoK 5 javascript unit-testing mocha.js sinon web-component-tester

如何使用sandbox.stub测试框架Sinon来覆盖egnavigator.languagenavigator.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);
  });
});
Run Code Online (Sandbox Code Playgroud)

然后我会收到以下错误:无法存根不存在的自有属性语言

这些存根均未按预期工作:

  • sandbox.stub(window.navigator, '语言', lang);
  • sandbox.stub(navigator, 'browserLanguage', lang);

正在模拟导航器对象

有什么提示吗?

abe*_*igo 3

在 javascript 中模拟用户代理?, 你可以:

  navigator.__defineGetter__('language', function(){
      return 'foo';
  });
Run Code Online (Sandbox Code Playgroud)

或者更现代的:

  Object.defineProperty(navigator, 'language', {
      get: function() {return 'bar';}
  });
Run Code Online (Sandbox Code Playgroud)