angular - 通过茉莉花测试Angular中的内部功能
问题描述
所以我定义了一个内部函数并将它分配给一个类变量,以便我可以再次使用它。那是因为我想访问父函数的参数,但不希望该类的任何其他方法访问该数据
@Component({
selector: 'app-report-topup',
templateUrl: './report-topup.component.html',
styleUrls: ['./report-topup.component.scss'],
})
export class ReportTopupComponent implements OnInit {
loadReports: (pageNum, pageSize) => void;
reportDataSource: ReportDataSource;
currentPageDetails: { index: number; size: number } = { index: 0, size: 5 };
constructor(public topupHttpService: TopupHttpService){}
ngOnInit(): void {
this.reportDataSource = new ReportDataSource(this.topupHttpService);
}
onReportTopupSearchFormSubmit(formData: ReportTopupSearch) {
this.loadReports = (pageNum, pageSize) => {
this.reportDataSource.loadReports();
};
this.loadReports(0, this.currentPageDetails.size);
this.setCurrentPageDetails(0 , this.currentPageDetails.size);
}
该代码工作正常,但是当我去测试它时,我开始遇到问题。这是我的 spec.ts 功能:
it('should call load Reports and setCurrentPageDetails on form submit', () => {
spyOn(component, 'setCurrentPageDetails');
const reportFormData: ReportTopupSearch = {
company: 'ABC',
dateFrom: '2021-01-01',
dateTo: '2021-01-02',
status: 'new',
};
component.onReportTopupSearchFormSubmit(reportFormData);
expect(component.loadReports).toBeDefined();
expect(component.loadReports).toHaveBeenCalled();
expect(component.setCurrentPageDetails).toHaveBeenCalled();
});
component.loadReports = jasmine.createSpy('load reports spy' , () => {});
我收到错误“预期的间谍,但有一个功能”:
我不确定如何解决这个问题并测试是否调用了 component.loadReports()。而 setCurrentPageDetails() 方法的间谍工作正常,因为它是类的方法。任何人都可以帮忙吗?
解决方案
您的问题是您正在实现loadReports
并立即调用它,没有办法像这样监视它,SpyOn
需要实现:
- 如果你在调用它
loadReports
之前onReportTopupSearchFormSubmit
spyOn会抱怨这loadReports
不是一个函数。 - 如果您在调用spyOn
loadReports
后进行onReportTopupSearchFormSubmit
监视,则为时已晚,因为loadReports
已经调用了 。
我的建议是onReportTopupSearchFormSubmit
分成两种方法:
- 第一种动态实现的方法
loadReports
- 第二种方法将使用以前的实现并在那里添加其余的逻辑
this.loadReports(0, this.currentPageDetails.size); this.setCurrentPageDetails(0 , this.currentPageDetails.size);
推荐阅读
- xml - tinyxml2 如何从包含 xml 文本和二进制数据的文件中加载 XMLDocument
- c# - 如何为 html 标题属性设计 InfoHelper
- java - java如何将Multipart / Form-data发送到休息服务
- arrays - 如何使用jq将元素插入数组
- python - 在 Python 中比较(是否相等)2 个 .png 图像
- java - java中parallelStream中的错误
- azure-cosmosdb - 通过非分区键获取 Azure cosmosdb 数据
- python - 是否可以为我的 allauth 模板执行“if”语句来更改导航栏?
- javascript - 是否可以将此文本电子邮件链接更改为 html,或者至少显示替代文本?
- typescript - 尝试将 tsconfig 作为 json 对象加载