Я пытаюсь выяснить, как имитировать вызов ajax внутри серверной обработки Datatables
$('#datatables').DataTable({
iDisplayLength: 10,
sPaginationType: 'full_numbers',
bServerSide: true,
ajax: (dataTablesParameters: any, callback) => {
const info = $('#datatables')
.DataTable()
.page.info();
this.invoiceService
.getInvoiceByUser()
.subscribe(
data => {
this.tableData = data.data;
callback({
recordsTotal: data.recordsTotal,
recordsFiltered: data.recordsTotal,
data: []
});
},
error => {
this.tableData = [];
}
);
}
});
В приведенном выше коде я вызываю метод "getInvoiceByUser" внутри моей пользовательской службы для получения значений из базы данных. Тем не менее, код работает нормально и дает ожидаемый результат. То, что я изо всех сил пытаюсь пройти тестовый кейс.
Ниже приведен код моего теста.
it('should call load invoice data when role equals to admin in ngOnInit', () => {
// Create mock function
const invoiceServiceSpy = spyOn(
(component as any).invoiceService,
'getAllInvoices'
).and.returnValue(Observable.of(true));
component.ngOnInit(); // calling this function since the DataTable render is happening at the ngOnit();
expect(userServiceSpy).toHaveBeenCalled();
expect(invoiceServiceSpy).toHaveBeenCalled();
});
Я вызываю component.ngOnit (), поскольку процесс DataTable происходит в ngOnit. Однако тест завершается ошибкой: «Ожидается, что шпион был вызван, но не был вызван.
Я пробовал это, издеваясь над домом, столом и многими другими способами, но все еще не повезло.
Кто-нибудь сталкивался с такой же проблемой и разобрался?