如何对nSwag Angular客户端进行单元测试

如何对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));

我正在尝试为一个使用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));

   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?