【问题标题】:How to test agains null or undefined values?如何再次测试空值或未定义值?
【发布时间】:2020-12-27 01:24:30
【问题描述】:

我正在使用 typescript 创建一个 API,并且像往常一样,我从 request.body 获取值。事情是这样的,这些值可以是未定义的,我需要将这些值传递给我的工厂。

在工厂内部,我有一个函数可以验证值是空值还是未定义。 (和其他一些验证)通过这种方式,我确保不会将未定义或空值传递给我的实例。但由于类型定义,我无法对其进行测试。

请求生成的值可以是未定义的,也可以不是未定义的,但构造函数可以获取该值。当我尝试测试它时,我不能,因为解释器不允许我传递 null 或 udnefined 值(因为类型),例如:

...

const { value } = request.body;
    
const result = myFactory.create(value);
// This works fine because body can be anything, literaly, even undefined. 
//Althought the function is waiting for a number.
    

...

const nullValue = null;

const result = myFactory.create(nullValue);
// this does not work, because the function want a number and is getting a null value.
// but i need to do this in order to test that case.

...

事情是这样的:我该如何测试呢? 对于函数接收为空或未定义并且因此不创建实例的情况,我无法生成空值。

我应该退出函数验证针对 NullOrUndefined 的代码部分吗?

【问题讨论】:

  • 它没有帮助。我需要能够复制一个未定义的值作为参数,其中一个字符串或数字被认为是。可能我的方法不好,我需要从工厂内部取出代码。
  • 为什么// @ts-expect-error const result = myFactory.create(null); 不起作用?它允许您传递您的类型通常拒绝的值,即undefined,以便编写测试。
  • 天哪!我没意识到。非常感谢。
  • 没问题。最好的部分是// @ts-expect-error 标志本身会导致错误,如果您的代码更改为传递像myFactory.create(1) 这样的valid 值。所以它非常精确且重构安全。

标签: node.js typescript api testing mocha.js


【解决方案1】:

如果您希望myFactory.create 工厂收到号码 |空 | undefined 那么它应该反映在类型签名中。

如果您从 api 调用中接收数据,而这些数据始终是任何(或更好地未知),那么这些工厂应该采用 anyunknown 参数。

或者你可以有一个单独的function decode(value: unknown): number,你先调用它,然后将解码后的号码传递给myFactory.create

有一些库可以做到这一点(将数据解码为您的域模型/类型),例如 io-ts

【讨论】:

  • 感谢您的回答。
猜你喜欢
  • 2018-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 2019-12-17
相关资源
最近更新 更多