我正在尝试在我的Jest单元测试中模拟浏览器中的window.navigator.language
属性,以便测试我的页面内容是否使用了正确的语言。
我在网上找到了人们使用以下代码:
Object.defineProperty(window.navigator, 'language', {value: 'es', configurable: true});
我已经将其设置在我的测试文件顶部,并且它在那里起作用。
然而,当我在单个测试中重新定义时(并且确保configurable设置为true),它不会被重新定义,仍然使用旧值。是否有人知道一种确定更改它的方法?
我正在尝试在我的Jest单元测试中模拟浏览器中的
window.navigator.language
属性,以便测试我的页面内容是否使用了正确的语言。我在网上找到了以下代码:Object.defineProperty(window.navigator, 'language', {value: 'es', configurable: true});
我已经将其设置在我的测试文件顶部并生效。但是,当我在单个测试中重新定义时(并且确保configurable设置为true),它不会被重新定义,仍然使用旧值。请问是否有一种确切的方法可以更改它?
beforeEach(() => {
jest.clearAllMocks()
Object.defineProperty(global.navigator, 'language', {value: 'es', configurable: true});
wrapper = shallow(<Component {...props} />)
})
it('should do thing 1', () => {
Object.defineProperty(window.navigator, 'language', {value: 'de', configurable: true});
expect(wrapper.state('currentLanguage')).toEqual('de')
})
it('should do thing 2', () => {
Object.defineProperty(window.navigator, 'language', {value: 'pt', configurable: true});
expect(wrapper.state('currentLanguage')).toEqual('pt')
})
对于这些测试,它没有改变语言为我设置的新语言,而是始终使用顶部的那一种语言。
<Component />
刚刚记录了该属性,那么你能告诉我为什么它仍然不正确吗? - the venomwindow.navigator.location
,只有其预期的副作用,并且预期是错误的。我提供了答案。希望这可以帮助您。 - Estus Flask