如何对nSwag Angular客户端进行单元测试
我正在尝试为一个使用nswag生成的客户机编写一个简单的单元测试,它看起来很简单如何对nSwag Angular客户端进行单元测试,angular,ngxs,nswag,Angular,Ngxs,Nswag,我正在尝试为一个使用nswag生成的客户机编写一个简单的单元测试,它看起来很简单 it('it create a call create on the api if new household', async(() => { const newHousehold = new Household(); newHousehold.name = 'Test Household'; store.dispatch(new SaveHousehold(newHousehold));
it('it create a call create on the api if new household', async(() => {
const newHousehold = new Household();
newHousehold.name = 'Test Household';
store.dispatch(new SaveHousehold(newHousehold));
const req = httpTestingController.expectOne('http://localhost:57461/api/Households');
req.flush(newHousehold);
expect(req.request.method).toEqual('POST');
}));
但我得到了以下错误:
Failed: Automatic conversion to Blob is not supported for response type
我尝试了几种方法将newhouse
转换为blob,但它总是返回空白或抛出其他错误。那么我怎样才能测试这个客户机呢
仅供参考,我还将NGXS用于存储,因此它调用store.dispatch来触发http请求
下面是操作的代码
@Action(SaveHousehold)
public saveHousehold(
{ dispatch }: StateContext<HouseholdStateModel>,
payload: SaveHousehold
) {
let subscription: Observable<Household>;
if (payload.household.id) {
subscription = this.service.update(
payload.household.id,
payload.household
);
} else {
subscription = this.service.create(payload.household);
}
subscription.subscribe(result => {
if (!payload.household.id) {
dispatch(new LinkToExistingHousehold(result.id));
}
},error=>{
console.error(error);
});
}
问题似乎是因为create中指定的
响应类型
。解决方案是将响应刷新为Blob,如下所示:
req.flush(new Blob([JSON.stringify(newHousehold)], { type: 'application/json' }));
解决方案是将您的响应刷新为Blob,如下所示:
req.flush(new Blob([JSON.stringify(newHousehold)], { type: 'application/json' }));
dispatch方法返回一个可观察值,这意味着它返回时未“完成”。您需要订阅它,并在通过订阅的函数中完成测试。看一个例子,他们在发送完成后重置表单。是的,我理解这一部分,我还没有做到这一点,我的问题是发送的http调用。它被击中了,但是抛出了上面的错误。发布你的行动方法可能是个好主意then@RichDuncan我已经用更多的细节更新了这个示例,因此我将使用HttpClient类进行这种交互,如下所述:。请注意stack blitz示例:您可以避免将post数据封送到JSON中,并且响应处理也可以自动完成。另外,为什么响应类型为“blob”?我希望服务返回json no?dispatch方法返回一个可观察的值,这意味着它在返回时没有“完成”。您需要订阅它,并在通过订阅的函数中完成测试。看一个例子,他们在发送完成后重置表单。是的,我理解这一部分,我还没有做到这一点,我的问题是发送的http调用。它被击中了,但是抛出了上面的错误。发布你的行动方法可能是个好主意then@RichDuncan我已经用更多的细节更新了这个示例,因此我将使用HttpClient类进行这种交互,如下所述:。请注意stack blitz示例:您可以避免将post数据封送到JSON中,并且响应处理也可以自动完成。另外,为什么响应类型为“blob”?我希望服务返回json no?