ionic-framework - 单元测试 - 离子框架中的警报控制器出现问题
问题描述
我正在尝试为已调用或未调用的方法编写测试用例。在该方法中,我调用了一个警报确认框。
我收到一个错误,例如
组件.ts失败:this.alertCtrl.create 不是函数
submitTicket(comments) {
if (comments.length > 0) {
const prompt = this.alertCtrl.create({
title: "<span> Improve Solution </span>",
message: "<span>" + 'Are you sure you want <br>' + "</span>" +
"<span>" + 'to submit this improvement' + "</span>",
enableBackdropDismiss: false,
buttons: [
{
text: 'Cancel',
handler: data => {
// Some stuff
}
},
{
text: 'Improve Solution',
handler: data => {
//Some stuff
}
}
]
});
prompt.present();
} else {
this.errorMsg = true;
}
}
组件.spec.ts
import {AlertControllerMock } from 'ionic-mocks';
beforeEach(async(()=> {
TestBed.configureTestingModule({
declarations: [ImprovedsolutionsPage],
imports: [
IonicModule.forRoot(ImprovedsolutionsPage),
HttpClientTestingModule
],
providers: [
NavController,
AppService,
AlertController,
ImprovedsolutionsPage,
{provide: ViewController, useClass: ViewControllerMock},
{provide: LoadingController, useClass: LoadingControllerMock},
{provide: AlertController, useClass: AlertControllerMock},
]
}).compileComponents
}))
beforeEach(()=> {
fixture=TestBed.createComponent(ImprovedsolutionsPage)
component=fixture.componentInstance
fixture.detectChanges()
})
it('should be call submitTicket method', async(()= > {
spyOn(component, 'submitTicket').and.callThrough()
let comment='Needs to improve in detailing '
component.submitTicket(comment)
expect(component.submitTicket).toHaveBeenCalled()
}))
在这里,我使用 ionic-mocks 模块并导入了 AlertControllerMock,如上面的代码所示。我使用的是离子版本 3。为了测试我使用的是 Karma 和 jasmine
有人可以帮我解决这个问题。
解决方案
[更新]这是我的提示:我无法检查您的模拟实现。但是,请确保您有一个单独的布尔变量来证明是否在create
其他地方调用了模拟函数,例如,。
create(opts?: AlertOptions): Promise<HTMLIonAlertElement> {
this.createAlertCalled = true;
this.opts = opts;
const self = this;
return Promise.resolve(<HTMLIonAlertElement>{
present: (): Promise<void> => {
self.presentCalled = true;
return Promise.resolve();
}
});
}
随后,对提到的变量做一个spyOn
withAlertControllerMock
并期望断言是真实的。
推荐阅读
- jenkins - 在 Jenkins 中使用 Cli 或 REST API 在 Jenking 中创建用户、作业和管道
- android - 由于图标按钮而出现此渲染 flex 错误
- c# - 字符串的 SHA256 散列**使用更新**(UTF8 字符串)
- vbscript - 经典 asp:server.executed 脚本中的类写在父脚本主体之外
- reactjs - 我可以使用多个 useState 和 useReducer 而没有副作用吗?
- java - Apache Camel Nettty:无法通过 netty 组件在 TCP 套接字中接收消息
- python - python子进程模块同时读写
- tensorflow - SSD Mobilenetv2检测分数高于1
- upload - 在 Anzograph 中加载 2.2 亿个三元组
- c# - 如何将具有一些序列的大数组转换为包含这些序列作为数组元素的另一个数组?