Testing navigator.browserLanguage or navigator.language with Sinon.js

How to use the Sinonsandbox.stub testing framework for rewriting, for example. navigator.languageor navigator.userAgentfor testing?

When I try to use the following:

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);
  });
});

then I get the following error: You cannot drown out a non-existent native property language :

Without these stubs, they work as expected:

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

make fun of the navigator object .

Any clues?

+4
3

javascript?, :

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

:

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

+3

. , Chrome + Safari navigator.language( ), . , .

navigator = {
    userLanguage: 'de',
    language: 'en'
};

.

// eg: following fn returns navigator.userLanguage || navigator.language;
navigator.userLanguage = undefined; // non IE
LanguageRedirection.getBrowserLanguage().then(function(lang){
   expect(res).toEqual('en');
});
+1

This worked for me:

sinon.stub(global, "navigator").returns({
  userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"
});
0
source

Source: https://habr.com/ru/post/1627983/


All Articles