how to fix Error: ASSERTION ERROR: Should be run in update mode [Expected=> false == true <=Actual]
how to fix Error: ASSERTION ERROR: Should be run in update mode [Expected=> false == true <=Actual]
我正在用 angular 和 ChangeDetectorRef
编写代码
函数本身运行良好。
getVersionInfos() {
concat(
of(
this.getApiSubs = this.aboutInfoService.getApiVersion().subscribe((data) => {
if (data) {
this.apiData = data;
this.applicationCopyright = data.find(dt => dt.Name === "Web API Details").Value; }
})
),
of(
this.getEngineSubs = this.aboutInfoService.getEngineVersion().subscribe((data) => {
if (data) {
this.engineData = data;
this.engineDetails = data.find(dt => dt.itemcode === "VER").versiontext;
this.cd.detectChanges();
}
})
)
);
}
当我为其编写单元测试代码时,它总是在
上失败
this.cd.detectChanges();
这给了我这个错误
错误:断言错误:应该是 运行 更新模式 [预期=> false == true <=实际]
这是规范代码块
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
AboutComponent
],
imports: [
MatBottomSheetModule,
HttpClientTestingModule
],
providers: [
{
provide: AboutInfoService,
useValue: jasmine.createSpyObj("AboutInfoService", [
"getApiVersion",
"getEngineVersion"
]),
},
{
provide: ChangeDetectorRef,
useValue: jasmine.createSpyObj("ChangeDetectorRef", ["detectChanges"])
}
]
})
.compileComponents();
aboutInfoService = TestBed.get(AboutInfoService);
aboutInfoService.getApiVersion.and.returnValue(of(mockApiResponse));
aboutInfoService.getEngineVersion.and.returnValue(of(mockEngineResponse));
}));
beforeEach(() => {
fixture = TestBed.createComponent(AboutComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it("should create", () => {
expect(component).toBeTruthy();
});
如果我删除代码
this.cd.detectChanges();
从函数中可以通过单元测试
我已经搞定了,
我已将函数 getVersionInfos 放在 ngOnInit 中而不是构造函数中
我在 Angular 11 中也有这个错误。问题是我正在执行:
this.cdr.detectChanges();
在构造函数内部,这是错误的。我把它移到了 ngOnInit()
避免在构造函数中或将从构造函数调用的方法中保留 this._changeDetectorRef.detectChanges()
方法调用。 Angular 在这两种情况下都会抛出此错误。
我正在用 angular 和 ChangeDetectorRef
编写代码函数本身运行良好。
getVersionInfos() {
concat(
of(
this.getApiSubs = this.aboutInfoService.getApiVersion().subscribe((data) => {
if (data) {
this.apiData = data;
this.applicationCopyright = data.find(dt => dt.Name === "Web API Details").Value; }
})
),
of(
this.getEngineSubs = this.aboutInfoService.getEngineVersion().subscribe((data) => {
if (data) {
this.engineData = data;
this.engineDetails = data.find(dt => dt.itemcode === "VER").versiontext;
this.cd.detectChanges();
}
})
)
);
}
当我为其编写单元测试代码时,它总是在
上失败 this.cd.detectChanges();
这给了我这个错误
错误:断言错误:应该是 运行 更新模式 [预期=> false == true <=实际]
这是规范代码块
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
AboutComponent
],
imports: [
MatBottomSheetModule,
HttpClientTestingModule
],
providers: [
{
provide: AboutInfoService,
useValue: jasmine.createSpyObj("AboutInfoService", [
"getApiVersion",
"getEngineVersion"
]),
},
{
provide: ChangeDetectorRef,
useValue: jasmine.createSpyObj("ChangeDetectorRef", ["detectChanges"])
}
]
})
.compileComponents();
aboutInfoService = TestBed.get(AboutInfoService);
aboutInfoService.getApiVersion.and.returnValue(of(mockApiResponse));
aboutInfoService.getEngineVersion.and.returnValue(of(mockEngineResponse));
}));
beforeEach(() => {
fixture = TestBed.createComponent(AboutComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it("should create", () => {
expect(component).toBeTruthy();
});
如果我删除代码
this.cd.detectChanges();
从函数中可以通过单元测试
我已经搞定了,
我已将函数 getVersionInfos 放在 ngOnInit 中而不是构造函数中
我在 Angular 11 中也有这个错误。问题是我正在执行:
this.cdr.detectChanges();
避免在构造函数中或将从构造函数调用的方法中保留 this._changeDetectorRef.detectChanges()
方法调用。 Angular 在这两种情况下都会抛出此错误。