如何在异步函数中测试 await toPromise()? (.toPromise() 不是函数错误)
How to test await toPromise() inside async function? (.toPromise() is not a function error)
基于,我写了这个测试:
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 is not a function
好像我没有正确模拟服务?
方法 productService.getProductByCode() returns 一个产品的 Observable:
getProductByCode(code: string): Observable<Product>
(product) 的方法创建了一个 product 的 Observable 对象。方法 .toPromise() 是来自 Observable 的方法,returns 来自 Observable 的承诺。这里导入:
import { of } from 'rxjs';
最后,更改我的关键字来搜索它,我得到了a good answer。我在嘲笑我的服务。
这个(我的代码)是错误的:
beforeEach(() => {
mockProductService = mock(ProductService);
mockStationService = mock(StationService);
sut = new QuickStationChangeComponentService(
mockProductService,
mockStationService,
);
});
要让它工作,它需要一个实例:
beforeEach(() => {
mockProductService = mock(ProductService);
mockStationService = mock(StationService);
sut = new QuickStationChangeComponentService(
instance(mockProductService),
instance(mockStationService),
);
});
我关注的是一种错误的搜索方式。
如果您像我一样习惯于 Java 并认为 mock(class) returns 是 class 的模拟实例,那您就错了。如果你想要一个像我测试中的实例,你需要创建一个模拟实例。
基于
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 is not a function
好像我没有正确模拟服务?
方法 productService.getProductByCode() returns 一个产品的 Observable:
getProductByCode(code: string): Observable<Product>
(product) 的方法创建了一个 product 的 Observable 对象。方法 .toPromise() 是来自 Observable 的方法,returns 来自 Observable 的承诺。这里导入:
import { of } from 'rxjs';
最后,更改我的关键字来搜索它,我得到了a good answer。我在嘲笑我的服务。
这个(我的代码)是错误的:
beforeEach(() => {
mockProductService = mock(ProductService);
mockStationService = mock(StationService);
sut = new QuickStationChangeComponentService(
mockProductService,
mockStationService,
);
});
要让它工作,它需要一个实例:
beforeEach(() => {
mockProductService = mock(ProductService);
mockStationService = mock(StationService);
sut = new QuickStationChangeComponentService(
instance(mockProductService),
instance(mockStationService),
);
});
我关注的是一种错误的搜索方式。
如果您像我一样习惯于 Java 并认为 mock(class) returns 是 class 的模拟实例,那您就错了。如果你想要一个像我测试中的实例,你需要创建一个模拟实例。