如何为用户登录数据创建存根数据



我试图为UserDetailsService创建存根数据。

所以我创建了一个间谍obj,并在提供者中使用。

这是我的代码

beforeEach(async (() => {
const mockUserDetailService = jasmine.createSpyObj('UserDetailsService',
['getUserRolePrivilegesByScreen']);
TestBed.configureTestingModule({
imports: [
HttpClientTestingModule, MatDialogModule, BrowserAnimationsModule, RouterTestingModule, 
MatMenuModule, MatFormFieldModule, MatInputModule, MatPaginatorModule, MatTableModule, 
MatSortModule, MatIconModule, MatCardModule
],
declarations: [DashboardComponent],
providers: [
{ provide: DataService, useValue: spyDataService },
{ provide: UserDetailsService, useValue: mockUserDetailService},
{ provide: MAT_DIALOG_DATA, useValue: {} },
{ provide: MatDialogRef, useValue: {} },
{ provide: LayoutUtilsService, useValue: {} }
],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
.compileComponents();
}));

我收到这个错误

TypeError:无法读取未定义的属性"canRead">

这是我在ngOnInit下的ts代码

this.dataService.setNumber(null);
if (this.userdetailservice.getUserHighestRole() == null) {
this.router.navigateByUrl('login');
} else {
this.screenPrivilege = this.userdetailservice.getUserRolePrivilegesByScreen('D&B');
this.userRole = this.userdetailservice.getUserHighestRole();
if (this.userRole == 'Fin' || this.userRole == 'Super') {
this.columnToDisplay = [...this.Fin];
this.landingPage = 'Fin';
this.exportHeaders = ['No', 'Numb', 'Amout', 'Date', 'Salary', 'Status'];
} else if (this.userRole == 'Gen') {
this.columnToDisplay = [...this.Gen];
this.landingPage = 'Gen';
this.exportHeaders = ['No', 'Numb', 'Amout', 'Date', 'Salary', 'Status'];
} else {
this.landingPage = 'Admin';
this.columnToDisplay = [...this.Admin];        
this.exportHeaders = ['No', 'Numb', 'Amout', 'Date', 'Salary', 'Status'];
}
if (this.screenPrivilege.canRead == 'Y') {
this.loadData();
this.loadPeriod();
}
}

从您提供的代码片段中,您似乎创建了一个模拟变量:

const mockUserDetailService = jasmine.createSpyObj(...);

但mock没有返回任何内容。也许是这样的:

mockUserDetailService.getUserRolePrivilegesByScreen.and.returnValue({canRead: 'Y'});

最新更新