【发布时间】:2021-06-26 02:00:48
【问题描述】:
基于this question,我写了这个测试:
it('call service when search product by code', async() => {
let code: string = 'CODE';
let product: Product = createProduct();
let properties: ProductProperties = createProductProperties();
when(mockProductService.getProductByCode(code)).thenReturn(of(product));
when(mockProductService.getProductProperties(product.id)).thenReturn(of(properties));
let result: Product = await sut.searchProductByCode(code);
expect(result.code).toEqual(product.code);
expect(result.properties).toEqual(properties);
verify(mockProductService.getProductByCode(code));
verify(mockProductService.getProductProperties(product.id));
});
我正在测试的功能是:
async searchProductByCode(code: string): Promise<Product> {
let product = await this.productService.getProductByCode(code).toPromise(); //fails running test
product.properties = await this.productService.getProductProperties(product.id).toPromise();
return product;
}
函数运行正常,但测试失败:
TypeError: this.productService.getProductByCode(...).toPromise 不是函数
是不是我没有正确地模拟服务?
productService.getProductByCode() 方法返回一个产品的 Observable:
getProductByCode(code: string): Observable<Product>
(product) 的方法创建一个产品的 Observable 对象。方法 .toPromise() 是 Observable 的一个方法,它从 observable 返回一个承诺。这里是导入:
import { of } from 'rxjs';
【问题讨论】:
-
of(product) 返回一个 Observable 的产品。 toPromise() 是 Observable 的一个方法,它从 observable 返回一个承诺。我编辑以放大有关我的代码的信息。谢谢!
标签: typescript angular6 karma-jasmine ts-mockito