我是一个新手Angular,尝试测试一个Angular 6服务,该服务利用handlebars.js构建基于输入JSON /数据的客户端HTML模板。
该服务在开发中产生了期望的结果,但我无法构建一个测试以确认服务正确编译HTML。我将基本模板(作为JavaScript字符串)直接导入到服务中,但当我尝试在.spec文件中运行编译方法时,我收到错误:
该服务在开发中产生了期望的结果,但我无法构建一个测试以确认服务正确编译HTML。我将基本模板(作为JavaScript字符串)直接导入到服务中,但当我尝试在.spec文件中运行编译方法时,我收到错误:
Error: You must pass a string or Handlebars AST to Handlebars.compile. You passed undefined
,这意味着基本模板字符串变量未在.spec文件中的服务内实例化。
PdfReportService.service.ts
文件import { Injectable } from '@angular/core';
import * as Handlebars from 'handlebars/dist/handlebars.min.js';
// base template
import base_html from './root_template/html';
// form templates
import form_html from './form_template/form.html';
import form_css from './form_template/form.css';
@Injectable({
providedIn: 'root'
})
export class PdfReportService {
...
...
public compileform(json: object, context?: any) {
Handlebars.registerPartial({ hbs_css_template: form_css });
Handlebars.registerPartial({ hbs_form_body: form_html });
return Handlebars.compile(base_html)({ json, context });
}
}
PdfReportService.service.spec.ts
文件
import { TestBed, inject } from '@angular/core/testing';
import { PdfReportService } from './pdf-reports.service';
// import test data
import {
formInputJson,
formInputContext,
formCompiledHTML
} from './pdf-reports.service.spec.data';
fdescribe('PdfReportService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
providers: [PdfReportService]
});
});
it('should compile the correct html from form input data', inject(
[PdfReportService],
(service: PdfReportService) => {
const result = service.compileform(formInputJson, formInputContext);
expect(result).toEqual(formCompiledHTML);
}
));
});
我尝试了更改服务和多种不同的传递变量的方法进行测试,但它们始终未定义。任何帮助将不胜感激!