错误:预期未定义为真实。angular 8的KARMA JASMINE单元测试用例
在angular 8中运行karma jasmine单元测试用例时出现以下错误 组件:管理对话框>onModalCancel 错误:预期未定义为真实。 我已经提供了我的规范和打字脚本文件。请说明为什么我被期望是真实的。提前适当 规格文件错误:预期未定义为真实。angular 8的KARMA JASMINE单元测试用例,angular,typescript,unit-testing,karma-jasmine,Angular,Typescript,Unit Testing,Karma Jasmine,在angular 8中运行karma jasmine单元测试用例时出现以下错误 组件:管理对话框>onModalCancel 错误:预期未定义为真实。 我已经提供了我的规范和打字脚本文件。请说明为什么我被期望是真实的。提前适当 规格文件 import { AdminDialogComponent } from "./admin-dialog.component"; import {TestBed, ComponentFixture, async, inject, tick, fakeAsync}
import { AdminDialogComponent } from "./admin-dialog.component";
import {TestBed, ComponentFixture, async, inject, tick, fakeAsync} from '@angular/core/testing';
import { FormsModule } from "@angular/forms";
import { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing';
import {TranslateModule,TranslateService} from "@ngx-translate/core";
import {Inject, NO_ERRORS_SCHEMA} from "@angular/core";
import {MAT_DIALOG_DATA, MatDialog, MatDialogModule, MatDialogRef} from '@angular/material/dialog';
import { OverlayContainer } from '@angular/cdk/overlay';
import {HttpClientModule} from "@angular/common/http";
import {RouterTestingModule} from "@angular/router/testing";
import {DataService} from "../../../services/data.service";
import {of} from "rxjs/internal/observable/of";
describe('Component: admin-dialog', () => {
let component: AdminDialogComponent;
let fixture: ComponentFixture<AdminDialogComponent>;
let translate: TranslateService;
let dialog: MatDialog;
let overlayContainer: OverlayContainer;
let dataService: DataService;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [FormsModule, MatDialogModule, HttpClientModule,RouterTestingModule,TranslateModule.forRoot()],
declarations: [AdminDialogComponent],
providers: [TranslateService,
{ provide: MatDialogRef, useValue: {addPanelClass: ()=>{'close-modal'} }},
{
provide: MAT_DIALOG_DATA, useValue: {
isNew: false, // I guess it's boolean
adminObj: {firstName: "AAAAAA", lastName: "AA", password: null, emailId: "test@test.com"}
}
},
{provide: dataService, useValue: {}}
],
schemas: [NO_ERRORS_SCHEMA]
});
TestBed.overrideModule(BrowserDynamicTestingModule, {
set: {
entryComponents: [AdminDialogComponent]
}
});
TestBed.compileComponents();
fixture = TestBed.createComponent(AdminDialogComponent);
component = fixture.componentInstance;
});
beforeEach(inject([MatDialog, OverlayContainer],
(d: MatDialog, oc: OverlayContainer) => {
dialog = d;
overlayContainer = oc;
})
);
afterEach(() => {
overlayContainer.ngOnDestroy();
});
it('should create', () => {
expect(component).toBeTruthy();
});
it("onModalCancel", () => {
expect(component.onModalCancel()).toBeTruthy();
});
});
从“/admin dialog.component”导入{AdminDialogComponent}”;
从“@angular/core/testing”导入{TestBed,ComponentFixture,async,inject,tick,fakeAsync};
从“@angular/forms”导入{FormsModule};
从“@angular/platform browser dynamic/testing”导入{browser DynamicTestingModule};
从“@ngx translate/core”导入{TranslateModule,TranslateService}”;
从“@angular/core”导入{Inject,NO_ERRORS_SCHEMA};
从“@angular/material/DIALOG”导入{MAT_DIALOG_数据、MatDialog、MatDialogModule、MatDialogRef};
从'@angular/cdk/overlay'导入{OverlayContainer};
从“@angular/common/http”导入{HttpClientModule};
从“@angular/router/testing”导入{RouterTestingModule}”;
从“../../../services/data.service”导入{DataService}”;
从“rxjs/internal/observable/of”导入{of};
描述('组件:管理对话框',()=>{
let组件:AdminDialogComponent;
let夹具:组件夹具;
让翻译:翻译服务;
let dialog:MatDialog;
让OverlyContainer:OverlyContainer;
让数据服务:数据服务;
在每个之前(()=>{
TestBed.configureTestingModule({
导入:[FormsModule、MatDialogModule、HttpClientModule、RouterTestingModule、TranslateModule.forRoot()],
声明:[AdminDialogComponent],
提供者:[翻译服务,
{provide:MatDialogRef,useValue:{addPanelClass:()=>{'close-modal'}},
{
提供:材料对话框数据,使用值:{
isNew:false,//我猜它是布尔值
adminObj:{firstName:“AAAAAA”,lastName:“AA”,密码:null,emailId:test@test.com"}
}
},
{提供:数据服务,使用值:{}
],
架构:[无错误\u架构]
});
TestBed.overrideModule(浏览器动态测试模块{
设置:{
entryComponents:[AdminDialogComponent]
}
});
TestBed.compileComponents();
fixture=TestBed.createComponent(AdminDialogComponent);
组件=fixture.componentInstance;
});
beforeach(注入([MatDialog,OverlyContainer],
(d:MatDialog,oc:OverlyContainer)=>{
dialog=d;
覆盖容器=oc;
})
);
之后(()=>{
overlycontainer.ngondstroy();
});
它('应该创建',()=>{
expect(component.toBeTruthy();
});
它(“onModalCancel”,()=>{
expect(component.onModalCancel()).toBeTruthy();
});
});
Ts文件
import {Component, Inject, OnInit} from "@angular/core";
import {MAT_DIALOG_DATA, MatDialogRef} from "@angular/material";
import {DataService} from "../../../services/data.service";
@Component({
selector: 'admin-dialog',
templateUrl: './admin-dialog.component.html',
styleUrls: ['./admin-dialog.component.scss']
})
export class AdminDialogComponent implements OnInit {
public accessHasSelected : any ='';
public errorObj : any = {};
public checkBoxSelected : boolean;
public adminObj: any = {
active:true,
firstName:"",
lastName:"",
// emailId:"",
access:[]
};
/***
*
* @param dialogRef
* @param data
* @param fromGroup
* @param dataService
*/
constructor(
public dialogRef: MatDialogRef<AdminDialogComponent>,
@Inject(MAT_DIALOG_DATA) public data: any,
private dataService: DataService) {
if (this.data.isNew){
this.newAdmin();
}
else {
this.editAdmin(this.data.adminObj);
}
}
/*
* This method will get called while loading new admin modal.
* */
newAdmin() {
this.dataService.getAllAdminAccess().subscribe(
response => {
this.adminObj.access = response.access;
},
error => { });
}
/***
* This method will get called while loading edit existing admin modal.
* @param response
*/
editAdmin(response){
console.log(response);
this.dataService.getAdminDetails(response.emailId).subscribe(
response => {
//component related success actions
this.adminObj = response;
},
error => {});
}
/**
*
*/
ngOnInit() {}
onModalCancel(): void {
this.dialogRef.addPanelClass('close-modal');
setTimeout(()=>{
this.dialogRef.close();
},500);
}
}
import{Component,Inject,OnInit}来自“@angular/core”;
从“@angular/material”导入{MAT_DIALOG_DATA,MatDialogRef}”;
从“../../../services/data.service”导入{DataService}”;
@组成部分({
选择器:“管理对话框”,
templateUrl:“./admin dialog.component.html”,
样式URL:['./admin dialog.component.scss']
})
导出类AdminDialogComponent实现OnInit{
公共访问权:任意=“”;
public errorObj:any={};
选中公共复选框:布尔值;
公共管理对象:任意={
主动:对,
名字:“,
姓氏:“,
//电子邮件ID:“”,
访问:[]
};
/***
*
*@param dialogRef
*@param数据
*@param fromGroup
*@param数据服务
*/
建造师(
公共dialogRef:MatDialogRef,
@注入(MAT_DIALOG_DATA)公共数据:任意,
专用数据服务:数据服务){
if(this.data.isNew){
this.newAdmin();
}
否则{
this.editAdmin(this.data.adminObj);
}
}
/*
*加载新的管理模式时将调用此方法。
* */
newAdmin(){
this.dataService.getAllAdminAccess().subscribe(
响应=>{
this.adminObj.access=response.access;
},
错误=>{});
}
/***
*加载“编辑现有管理模式”时将调用此方法。
*@param响应
*/
编辑管理员(回应){
控制台日志(响应);
this.dataService.getAdminDetails(response.emailId).subscribe(
响应=>{
//与组件相关的成功行动
this.adminObj=响应;
},
错误=>{});
}
/**
*
*/
ngOnInit(){}
onModalCancel():void{
this.dialogRef.addPanelClass('close-modal');
设置超时(()=>{
this.dialogRef.close();
},500);
}
}
ngOnInit()未返回任何值。因此,它显示未定义
要检查函数是否已定义,您可以编写如下测试用例:
it("onModalCancel", () => {
expect(component.onModalCancel).toBeDefined();
});
@Buczkowski你能在这方面帮助我吗?为什么你要测试void函数,就像它返回一个布尔值一样?@Alexus如何涵盖
onModalCancel()的测试用例