我有一个注入到AppModule中的服务,它是一个单例,它使用一个由swagger生成的API服务:
export class QueryService {
public cache: Map<string, EvaluationResult> = new Map<string, EvaluationResult>();
constructor(
private queryService: QueryApi,
) { }
public hashQueries(queries: Query[]): string {
const hashedQueries: string[] = [];
for (const query of queries) {
hashedQueries.push(query.hashCode());
}
hashedQueries.sort();
const hashcode = new Md5();
hashcode.appendStr(hashedQueries.join(","));
return (hashcode.end() as string);
}
}
如您所见,该服务使用缓存。使用哈希码将每个查询保存到缓存中,并在调用该方法时检查查询是否已存在于缓存中。
我想编写一个检查哈希码功能是否有效的测试。目前我有这样的东西:
describe("QueryService", () => {
it("should return a valid hashcode", () => {
// make one type of query
// make another type of query
let service: QueryService;
const queries = [attributeQuery, sodQuery];
const hashcode = service.hashQueries(queries);
expect(hashcode).toBeDefined();
expect(hashcode.length).toBe(32);
});
it("should return the same hashcode", () => {
// make two types of queries again but place them
// in a different order
});
it("should return a different hashcode", () => {
// make two types of queries again but change a
// tiny detail so the hashcode is different
});
}
如您所见,我想使用QueryService及其hashQueries()函数,而无需真正的组件。初始化这样的服务并不理想,因为它的构造函数需要另一个API服务,该服务也需要其他参数。
有使用该服务的简便方法吗?
谢谢!
答案 0 :(得分:1)
除非您在测试规范中需要它们,否则您不必担心Dependency Injectors
中的service
。并且您无需使用service
运算符来创建new
对象。
您可以按照自己的规范进行以下操作,这将消除对DI
参数的需要:
TestBed.get(QueryService)
describe("QueryService", () => {
let service : QueryService;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [QueryService]
});
service = TestBed.get(QueryService);
});
it("should return a valid hashcode", () => {
// make one type of query
// make another type of query
// let service: QueryService; --- No need to create service reference or object everytime
const queries = [attributeQuery, sodQuery];
const hashcode = service.hashQueries(queries);
expect(hashcode).toBeDefined();
expect(hashcode.length).toBe(32);
});
}
也
如果您不关心Dependency Injectors
中的service
,则可以在使用null
创建实例时,简单地将constructor
作为new
参数传递运算符。
let service = new QueryService(null);