在Angular 9中,你可以使用Jest来进行单元测试。下面是一个示例,演示如何模拟一个Promise并检查调用的方法:
首先,你需要安装Jest和一些相关的包。在项目根目录下运行以下命令:
npm install --save-dev jest @types/jest ts-jest
接下来,你需要配置Jest。在项目根目录下创建一个jest.config.js文件,并添加以下内容:
module.exports = {
preset: "jest-preset-angular",
setupFilesAfterEnv: ["/src/setupJest.ts"],
globals: {
"ts-jest": {
tsConfig: "/tsconfig.spec.json",
stringifyContentPathRegex: "\\.html$",
astTransformers: {
before: [
"jest-preset-angular/build/InlineFilesTransformer",
"jest-preset-angular/build/StripStylesTransformer"
]
}
}
},
testPathIgnorePatterns: [
"/node_modules/",
"/dist/",
"/src/test.ts"
],
transformIgnorePatterns: [
"node_modules/(?!@ngrx|ngx-socket-io|ngx-auto-unsubscribe)"
],
coverageReporters: ["html"],
collectCoverageFrom: ["/src/app/**/*.ts"],
moduleNameMapper: {
"@app/(.*)": "/src/app/$1"
}
};
然后,在项目根目录下创建一个src/setupJest.ts文件,并添加以下内容:
import "jest-preset-angular";
import "@testing-library/jest-dom";
接下来,我们来创建一个组件,并在其中模拟一个Promise并检查调用的方法。
在你的项目中创建一个新的组件,例如promise.component.ts,并添加以下内容:
import { Component } from "@angular/core";
@Component({
selector: "app-promise",
template: "{{ result }}"
})
export class PromiseComponent {
result: string;
fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
this.result = "Data fetched successfully";
resolve();
}, 1000);
});
}
}
然后,在项目根目录下创建一个promise.component.spec.ts文件,并添加以下内容:
import { TestBed, ComponentFixture } from "@angular/core/testing";
import { PromiseComponent } from "./promise.component";
describe("PromiseComponent", () => {
let component: PromiseComponent;
let fixture: ComponentFixture;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [PromiseComponent]
});
fixture = TestBed.createComponent(PromiseComponent);
component = fixture.componentInstance;
});
it("should fetch data successfully", async () => {
const fetchDataSpy = spyOn(component, "fetchData").and.callThrough();
await component.fetchData();
expect(fetchDataSpy).toHaveBeenCalled();
expect(component.result).toBe("Data fetched successfully");
});
});
最后,你可以运行ng test命令来运行测试,并检查是否通过。
这样,你就可以使用Jest进行单元测试,模拟一个Promise并检查调用的方法了。