我对使用 Jest 为当前未发现的 javaScript 代码库进行测试和编写测试还很陌生。该代码涵盖了一些利基用例,因为它在页面加载期间由浏览器有条件地注入和执行。无论如何,我在模拟自定义对象时遇到了问题。这是有问题的功能:
const setEnterpriseCookie = () => {
// Get the current page uri
let path = window.location.pathname;
// Matches all pages containing '/regex_expression'
if (path.match(/.*\/regex_expression.*/)) {
window.TOOL.cookie.setCookie(...args);
}
};
据我了解,我需要模拟两者window.location.pathname以返回一个字符串,并且我需要模拟window.TOOL.cookie.setCookie()为模拟函数。这是我的测试尝试:
var windowSpy;
describe('Tests for the page-specific-methods.js file', () => {
beforeEach( () => {
windowSpy = jest.spyOn(global, 'window', 'get');
});
afterEach( () => {
windowSpy.mockRestore();
})
test('Test the page path detecting the enterprise string', () => {
windowSpy.mockImplementation( () => ({
location: {
pathname: '/enterprise/contact',
},
TOOL: {
cookie: {
setCookie: jest.fn(),
},
},
}));
setEnterpriseCookie();
expect(window.TOOL.cookie.setCookie).toBeCalledTimes(1);
expect(window.TOOL.cookie.setCookie).toHaveBeenLastCalledWith(...args);
})
});
测试失败,表示window.TOOL.cookie.setCookie被调用了 0 次。我深入研究了这个过程,发现它window.location.pathname按预期执行,因此代码进入了调用window.TOOL.cookie.setCookie. 我认为问题出在我如何模拟的某个地方window.TOOL.cookie.setCookie,但我一直没能找到任何描述如何模拟如此之深的方法的帮助。
先谢谢您的帮助!
慕莱坞森
相关分类