首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用navigator.browserLanguage或navigator.language测试Sinon.js

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

Stack Overflow用户
提问于 2016-02-09 15:07:11
回答 2查看 3.6K关注 0票数 5

如何使用测试框架的sandbox.stub (测试框架西农 )覆盖(例如navigator.languagenavigator.userAgent )进行测试?

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

代码语言:javascript
复制
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(导航器,“浏览器语言”,lang);

正在模拟导航器对象

有什么暗示吗?

EN

回答 2

Stack Overflow用户

发布于 2016-07-20 09:25:36

这里不需要西农。问题是,至少Chrome + Safari可以防止对navigator.language (和其他)的更改,因为它们是只读的。但是,您可以重新创建整个导航器对象,因为您无论如何都在模仿它。

代码语言:javascript
复制
navigator = {
    userLanguage: 'de',
    language: 'en'
};

在我的测试中,在调用函数之前,我只需要定义所需的语言。

代码语言:javascript
复制
// eg: following fn returns navigator.userLanguage || navigator.language;
navigator.userLanguage = undefined; // non IE
LanguageRedirection.getBrowserLanguage().then(function(lang){
   expect(res).toEqual('en');
});
票数 1
EN

Stack Overflow用户

发布于 2019-09-27 18:12:24

这对我起了作用:

代码语言:javascript
复制
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"
});
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35295396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档