【发布时间】:2021-03-20 17:36:39
【问题描述】:
我用 create-react-app 创建了一个简单的打字稿项目。
我尝试用开玩笑的模拟来创建单元测试。
班级,我想模拟:
export class RestUserAPI {
public constructor() {}
getName(): string {
return "MyUser";
}
}
}
我要测试的类
import {RestUserAPI} from "./RestUserAPI";
export class UserService {
private userAPI: RestUserAPI;
public constructor() {
this.userAPI = new RestUserAPI();
}
getName(): string {
return this.userAPI.getName();
}
}
我的测试不起作用
import { UserService } from './UserService';
import {RestUserAPI} from "./RestUserAPI";
const mockedUserName = 'mocked user name'
jest.mock('./RestUserAPI');
const RestUserAPIMock = RestUserAPI as jest.MockedClass<typeof RestUserAPI>;
RestUserAPIMock.mockImplementation(() => {
return {
getName: jest.fn().mockReturnValue(mockedUserName),
};
});
describe("User Service", () => {
let instance: UserService;
beforeAll(() => {
RestUserAPIMock.mockClear()
});
it("should get user name", () => {
instance = new UserService();
expect(instance.getName()).toBe(mockedUserName);
expect(RestUserAPIMock).toHaveBeenCalledTimes(1);
});
});
这段代码有效,但这不是我想要的
import { UserService } from './UserService';
import {RestUserAPI} from "./RestUserAPI";
const mockedUserName = 'mocked user name'
jest.mock('./RestUserAPI');
const RestUserAPIMock = RestUserAPI as jest.MockedClass<typeof RestUserAPI>;
describe("User Service", () => {
let instance: UserService;
beforeAll(() => {
RestUserAPIMock.mockClear()
});
it("should get user name", () => {
RestUserAPIMock.mockImplementation(() => {
return {
getName: jest.fn().mockReturnValue(mockedUserName),
};
});
instance = new UserService();
expect(instance.getName()).toBe(mockedUserName);
expect(RestUserAPIMock).toHaveBeenCalledTimes(1);
});
});
我的错误是什么?
如何为我的所有“it”块创建模拟实现?
【问题讨论】:
标签: reactjs typescript jestjs mocking