如何使用测试框架的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);
});
});然后,我将得到以下错误:不能存根,不存在自己的属性语言
这些存根不像预期的那样工作:
正在模拟导航器对象。
有什么暗示吗?
发布于 2016-07-20 09:25:36
这里不需要西农。问题是,至少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');
});发布于 2019-09-27 18:12:24
这对我起了作用:
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"
});https://stackoverflow.com/questions/35295396
复制相似问题