dek*_*eko 10 reactjs jestjs enzyme
我想开玩笑地测试“canViewPage”方法。如何模拟 const userPages 这是来自 func getUserPage 的值
canViewPage(page){
const userPages = getUsersPages();
if(userPages.includes(page)){
return true;
}
return false;
}
getUsersPages(){
// here i hardcode a list of pages, for simplicity purposes
const pages = ['home','about','contact'];
return pages
}
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的
test('test canViewPage', () => {
const spy = jest.spyOn(canViewPage, 'userPages');
spy.mockReturnValue(['home','about','contact']);
expect(canViewPage('premiumPage')).toBe(false);
spy.mockRestore();
});
Run Code Online (Sandbox Code Playgroud)
我也尝试过这个
test('test canViewPage', () => {
const spy = jest.spyOn(canViewPage, 'getUsersPage');
spy.mockReturnValue(['home','about','contact']);
expect(canViewPage('premiumPage')).toBe(false);
spy.mockRestore();
});
Run Code Online (Sandbox Code Playgroud)
mac*_*ips 12
要嘲笑 的价值,userPages你必须嘲笑getUserPage。要实现这一点,取决于 和getUserPage的canViewPage定义位置和方式。我假设这两个函数是在类中定义的MyAwesomeClass
// MyAwesomeClass.js
export default class MyAwesomeClass {
canViewPage(page) {
const userPages = this.getUsersPages();
if (userPages.includes(page)) {
return true;
}
return false;
}
getUsersPages() {
// here i hardcode a list of pages, for simplicity purposes
const pages = ['home', 'about', 'contact'];
return pages;
}
}
// test.js
import MyAwesomeClass from '<path to MyAwesomeClass.js>'
test('test canViewPage', () => {
const instance = new MyAwesomeClass()
const spy = jest.spyOn(instance, 'getUsersPages');
spy.mockReturnValue(['mockItem1','mockItem2','mockItem3']);
expect(instance.canViewPage('premiumPage')).toBe(false);
expect(instance.canViewPage('mockItem1')).toBe(true);
spy.mockRestore();
});
Run Code Online (Sandbox Code Playgroud)
如果canViewPage和getUsersPages是类中的静态方法,则以不同的方式进行模拟
test('test canViewPage', () => {
const spy = jest.spyOn(MyAwesomeClass, 'getUsersPages');
spy.mockReturnValue(['mockItem1','mockItem2','mockItem3']);
expect(MyAwesomeClass.canViewPage('premiumPage')).toBe(false);
expect(MyAwesomeClass.canViewPage('mockItem3')).toBe(true);
spy.mockRestore();
});
Run Code Online (Sandbox Code Playgroud)