如何监视 window.location 函数?
how to spy on window.location functions?
我需要用一些单元测试来覆盖我的代码,在其中一种情况下我遇到了以下情况。
app.tsx
async someMethod(
.
.
.
window.location.replace(sessionStorage.getItem(REDIRECT_VALUE));
.
.
.
)
在我的测试文件中
window.location.replace = jest.fn();
.
.
somevariable.SomeMethod = jest.fn();
expect(window.location.replace).toHaveBeenCalledWith("some url to redirect on");
我收到以下错误:无法分配给对象“[对象位置]”
的只读 属性 'replace'
我试过其他方法,比如
backupState = window.location
delete window.location;
window.location = Object.assign(new URL("https://example.org"), {
ancestorOrigins: "",
replace: jest.fn()
});
});
但是我得到的每个错误都不同,还有其他方法吗?
之前我用的是:
history.location.push(sessionStorage.getItem(REDIRECT_VALUE));
和
expect(auth.history.push).toHaveBeenCalled();
在这种情况下,测试正常。
一种测试方法是:
创建模拟函数 location.replace
:
const replaceMock = jest.fn();
和 spyOn window
,替换位置对象并设置 replaceMock
替换。
完整的测试示例:
const replaceMock = jest.fn();
describe('replace Location test ', () => {
it('should call location with specific arg', () => {
jest.spyOn(global as any, 'window', 'get').mockImplementationOnce(() => ({
location: {
replace: replaceMock,
},
}));
someMethod();
expect(replaceMock).toBeCalledWith('XX Value you want to test XX');
});
});
我需要用一些单元测试来覆盖我的代码,在其中一种情况下我遇到了以下情况。
app.tsx
async someMethod(
.
.
.
window.location.replace(sessionStorage.getItem(REDIRECT_VALUE));
.
.
.
)
在我的测试文件中
window.location.replace = jest.fn();
.
.
somevariable.SomeMethod = jest.fn();
expect(window.location.replace).toHaveBeenCalledWith("some url to redirect on");
我收到以下错误:无法分配给对象“[对象位置]”
的只读 属性 'replace'我试过其他方法,比如
backupState = window.location
delete window.location;
window.location = Object.assign(new URL("https://example.org"), {
ancestorOrigins: "",
replace: jest.fn()
});
});
但是我得到的每个错误都不同,还有其他方法吗?
之前我用的是:
history.location.push(sessionStorage.getItem(REDIRECT_VALUE));
和
expect(auth.history.push).toHaveBeenCalled();
在这种情况下,测试正常。
一种测试方法是:
创建模拟函数 location.replace
:
const replaceMock = jest.fn();
和 spyOn window
,替换位置对象并设置 replaceMock
替换。
完整的测试示例:
const replaceMock = jest.fn();
describe('replace Location test ', () => {
it('should call location with specific arg', () => {
jest.spyOn(global as any, 'window', 'get').mockImplementationOnce(() => ({
location: {
replace: replaceMock,
},
}));
someMethod();
expect(replaceMock).toBeCalledWith('XX Value you want to test XX');
});
});