如何在 Jasmine 中对“throw new Error()”子句进行单元测试

Posted

技术标签:

【中文标题】如何在 Jasmine 中对“throw new Error()”子句进行单元测试【英文标题】:How to unit test "throw new Error()" clause in Jasmine 【发布时间】:2021-12-09 03:32:09 【问题描述】:

我有一个使用服务的组件。我通过捕获错误并使用自定义消息抛出新错误来自定义服务抛出错误时会发生什么。我设法想出了下面的 UT,但它有两个问题:

    无论我在 expect() 中写入什么字符串,测试都会通过; 原代码抛出的新错误未被捕获,在jasmine控制台中显示:/

如何修复以下代码的 UT?

new-order.component.ts:

addNew(item: number) 
  this.service.add(item).subscribe(
     res => 
       this.sendNoti(item);
     ,
     err => 
        throw new Error(`Item no $item was not added to the DB`);
     

new-order.component.spec.ts

orderMockService.add.and.returnValue(throwError(status:500));
try 
  component.addNew(4);
 catch (err) 
  expect(orderMockService.add).toThrowError(`Item no $item was not added  to the DB`);


【问题讨论】:

【参考方案1】:

试试这个:

orderMockService.add.and.returnValue(throwError(status:500));
expect((function()  orderMockService.addNew(4);  )).toThrowError(`Item no $item was not added  to the DB`);

【讨论】:

不起作用:/ 我在 try & catch 子句和它之外都试过了

以上是关于如何在 Jasmine 中对“throw new Error()”子句进行单元测试的主要内容,如果未能解决你的问题,请参考以下文章

如何在 VueJS 中对 Vuex 动作进行单元测试

`throw 'foo'`、`throw Error('foo')`、`throw new Error('foo')` 有啥区别?

在catch块中throw new Exception的意义(转)

throw New Error

throw new OwnExceptionClass 让程序崩溃

本人在学习java,有个问题,throw new IllegalArgumentException(“一个字符串”)