【发布时间】:2019-06-15 16:50:50
【问题描述】:
我在组件中有一个方法“onEdit”。在那个方法中,我调用了服务方法“getAttributeById”,我在“getAttributeById”服务方法中进行了一个 api 调用并返回了一个 observable,我正在为它编写一个单元测试用例,但我得到了一个错误
"预期的间谍 getAttributeById 已被调用。"
onEdit(row) {
if (this.role != 'Admin' && this.role != 'Owner') {
return;
}
this.loadingData = true;
this._service.getAttributeById(row['id']).subscribe((data) => {
this.editing = true;
this.newAttribute = { ...data };
data.isEdit = true;
this.loadingData = false;
this._service.setData({attribute: this.newAttribute});
this.router.navigate(['attributes-edit']);
}) }
规格文件
describe('MetaDataComponent', () => {
let component: MetaDataComponent;
let fixture: ComponentFixture<MetaDataComponent>;
beforeEach(() => {
const metaDataServiceStub = {
getVariables: query1 => ({ subscribe: () => ({}) }),
getAttributeById: arg1 => ({ subscribe: () => ({}) }),
setData: object1 => ({}),
deleteAttribute: arg1 => ({ subscribe: () => ({}) })
};
const routerStub = { navigate: array1 => ({}) };
TestBed.configureTestingModule({
schemas: [NO_ERRORS_SCHEMA],
declarations: [MetaDataComponent],
providers: [
{ provide: MetaDataService, useValue: metaDataServiceStub },
{ provide: Router, useValue: routerStub }
]
});
spyOn(MetaDataComponent.prototype, 'getAttributes');
fixture = TestBed.createComponent(MetaDataComponent);
component = fixture.componentInstance;
});
it('onEdit', () => {
const payload = {id: '11111'};
const metaDataServiceStub: MetaDataService = fixture.debugElement.injector.get(MetaDataService);
const editSpy = spyOn(metaDataServiceStub, 'getAttributeById').and.returnValue(of({}));
expect(component.onEdit(payload)).toBeUndefined();
expect(editSpy).toHaveBeenCalled();
});
我遇到错误
Expected spy getAttributeById to have been called.
Error: Expected spy getAttributeById to have been called.
at stack (http://localhost:9876/absoluteC:/Users/U1192079/Projects/r2d2-ui/node_modules/jasmine-core/lib/jasmine-core/jasmine.js?0b1eaf7a13cae32191eadea482cfc96ae41fc22b:2455:17)
at buildExpectationResult (http://localhost:9876/absoluteC:/Users/U1192079/Projects/r2d2-ui/node_modules/jasmine-core/lib/jasmine-core/jasmine.js?0b1eaf7a13cae32191eadea482cfc96ae41fc22b:2425:14)
at Spec.expectationResultFactory (http://localhost:9876/absoluteC:/Users/U1192079/Projects/r2d2-ui/node_modules/jasmine-core/lib/jasmine-core/jasmine.js?0b1eaf7a13cae32191eadea482cfc96ae41fc22b:901:18)
at Spec.addExpectationResult (http://localhost:9876/absoluteC:/Users/U1192079/Projects/r2d2-ui/node_modules/jasmine-core/lib/jasmine-core/jasmine.js?0b1eaf7a13cae32191eadea482cfc96ae41fc22b:524:34)
at Ex
【问题讨论】:
标签: angular unit-testing karma-jasmine