angular - 在角茉莉花测试中模拟时出错
问题描述
在使用 jasmine 和 karma 时运行以下角度测试时出现错误。我已经模拟了组件的服务依赖项。但是,组件中使用了 tradeservice 的功能。我试过嘲笑这个功能,但它仍然抱怨
TypeError: this.tradeService.getCurrencyCodes is not a function
问题是什么 ?
在组件代码中
constructor(private tradeService: TradeService,
private authService: AuthService,
private orderService: OrderService,
private valueDateService: ValueDateService,
private dateService: DateService,
private clientService: ClientService) {
}
ngOnInit() {
this.getCurrencyCodes();
}
private getCurrencyCodes() {
this.tradeService.getCurrencyCodes()
.subscribe(
data => {
this.currencyList = data;
},
error => {
this.messageViewerModel.messages.push("Unable to get Currency codes");
});
}
在组件的spec文件中
class MockDateService {
}
class MockTradeService {
getCurrencyCodes() {
return;
}
}
class MockAuthService {
}
class MockOrderService {
}
class MockValueDateService {
}
class MockClientService {
}
class MockMessageViewerModel {
title: string;
messages: string[];
}
@Component({
selector: 'app-message-viewer',
template: ''
})
class MockMessageViewerComponent {
@Input()
messageViewer: MockMessageViewerModel;
}
describe('StripOrderComponent', () => {
let component: StripOrderComponent;
let clientService: ClientService;
let tradeService: TradeService;
let fixture: ComponentFixture<StripOrderComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
HttpClientModule,
RouterTestingModule,
FormsModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useClass: TranslateLanguageLoader
}
})
],
declarations: [
StripOrderComponent,
MockMessageViewerComponent,
],
providers: [
[{ provide: DateService, useValue: MockDateService }],
[{ provide: TradeService, useValue: MockTradeService }],
[{ provide: AuthService, useValue: MockAuthService }],
[{ provide: OrderService, useValue: MockOrderService }],
[{ provide: ValueDateService, useValue: MockValueDateService }],
[{ provide: ClientService, useValue: MockClientService }]
],
schemas: [NO_ERRORS_SCHEMA]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(StripOrderComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should be created', () => {
expect(component).toBeTruthy();
});
});
贸易服务
getCurrencyCodes() {
return this.tradeEndpoint.getCurrencyCodesEndpoint<string[]>();
}
解决方案
尝试更改useValue
为useClass
以下行。
[{ provide: TradeService, useValue: MockTradeService }],
推荐阅读
- octobercms - OctoberCMS BackendAuth::getUser() 返回 NULL
- kubernetes - 在同一命名空间中的 Pod 之间连接
- java - 单击图像滑块并转到 Android Studio 中的另一个活动
- asp.net-core - @onclick:preventDefault 在 Firefox 中不起作用
- sql - 计算满足特定条件的不同值
- android - 带有 ListView 的 Android RadioButton 组
- r - 如何将 LME4 输出提取到乳胶表?
- c++ - 创建一个函数以在最后向自身添加一个双向链表
- android - 如何以编程方式更改轮廓按钮图标?
- yocto - Yocto 构建失败,退出代码为“134”