2016-12-06 63 views
0

我正在尝试的是在Typescript中为单元测试编写单元测试,以获取现有的函数库,这些函数是使用纯JS编写的。我们所有的页面逻辑也都是纯JS。当给定错误类型作为输入时,这些函数中的一些会抛出异常。例如:使用Typescript和Jasmine对TypeError进行测试

Collection.pluck([{"a":1},{"a":2}], "a") // Pulls the values out of a list of objects 
> [1, 2] 

因此,第二个参数应该有一个字符串,您想要获取值的属性名称。在pluck函数中有类型检查来验证已经传入了一个对象数组,如果失败则抛出一个TypeError。

所以编写测试验证的正确类型的对象是通过了我会写它像普通的JS:

expect(function(){ Collection.pluck([{"a":1},{"a":2}], 0); }).toThrowError(TypeError); 
在我的声明文件

但是我把它定义为这样的:

declare namespace Collection { 
    function pluck(obj: Object, propertyName: string): any; 
} 

所以,当我去使用TS我得到一个编译错误,明明写单元测试: TS compile error

所以,我该怎么办WHA我希望没有任何改变的功能?有没有什么我可以在TS中配置忽略此文件仅此?

回答

0

如果您处于更改测试的位置,您可以尝试将测试的第二个参数作为字符串发送。

expect(function(){ Collection.pluck([{"a":1},{"a":2}], '0'); }).toThrowError(TypeError); 

UPDATE: 您正在使用的打字稿这已经这样做请在编译阶段(transpilation到JS)检查为您指定的函数声明的类型。技术上你的代码已经通过测试用例。 如果确实需要通过单元测试进行类型验证,那么对于类型设置为'any'的情况,应该这样做,因为这些在编译期间不会被检查。 或在这里检查 Unittesting in TypeScript

+0

虽然这将停止TS错误,但它会通过测试失败,因为我测试它是否显式为字符串。此外,我还做了其他类似的测试,其中我正在检查对象,数组,函数等,我也遇到同样的问题。 –

+0

将更新回答 –

+0

我想我可以使用'任何'。这很奇怪,因为它不能反映使用TS时函数的内部工作方式,但不像我们可以开始在应用程序的任何地方使用TS,所以除了我之外,任何人都不会看到定义中的这个“错误”。重要的是,编译的JS保持不变,并继续抛出TypeError。 –

相关问题