TypeScript中的单元测试

38

我知道,TypeScript 只有一天的历史。但是我很好奇是否有任何单元测试框架或方法可以用来编写和运行 TypeScript 的单元测试?

TypeScript 可以编译成 JavaScript,我可以为该 JavaScript 编写测试,但这不是我想要的。


那么你想要什么呢?单元测试可以测试代码的运行时行为,这在Javascript中非常清晰可见。 - Greg Hewgill
3
也许他想要一个用于编写单元测试的TypeScript框架。 - Tatiana Racheva
1
Typescript 就是 JavaScript -- 这就是整个意义所在。为现有的测试框架添加 TypeScript 定义文件是我们想要的。正如 Sohnee 所回答的那样。 - Michael Sondergaard
1
现在有一个使用TypeScript编写的开源项目,用于单元测试,其发布许可与TypeScript相同。tsUnit on Codeplex. http://tsunit.codeplex.com/ - Fenton
3个回答

21

TypeScript不是一种运行时语言。要执行你的TypeScript代码,你首先需要将它编译成JavaScript,测试也是如此。

你的测试也可以使用TypeScript编写,将两者都编译成JavaScript,然后使用你最喜欢的测试框架来执行测试。


6
今天并不一定如此。像 ts-mochats-node 这样的软件包允许在不生成磁盘上的 js 文件的情况下执行 TypeScript。通常情况下,这是更为可取的,因为它会为您处理源映射,并且不会用编译后的 js 文件混淆您的工作区。当然,我相信仍然会在内存中生成 js,但今天在运行测试之前转码是否最简单或最有效的工作流程我不确定。 - pixelpax

16

您可以使用任何现有的JavaScript单元测试框架在TypeScript或JavaScript中编写单元测试。

不久以后,我想现有的框架将获得TypeScript环境定义文件(更新-他们已经获得:http://definitelytyped.org/),这将使它们在TypeScript方面是静态类型的。与此同时,您可能需要阅读环境声明的相关信息,在测试开始时添加一些环境声明。

或者,您可以使用tsUnit TypeScript Unit Testing Framework,这是一个用TypeScript编写的单元测试框架,因此它与TypeScript兼容(也可以在JavaScript中使用)。


0

似乎还有另一个测试运行器/框架叫做Intern。https://theintern.github.io/

这里有一篇文章解释了如何将其与TypeScript结合使用:https://www.sitepen.com/blog/2015/03/24/testing-typescript-with-intern/

当您使用TypeScript并且正在寻找支持源映射的单元测试设置时,它看起来非常有前途。

示例测试:

import registerSuite = require('intern!object');
import assert = require('intern/chai!assert');
// Assume that we now have a version of our model in TypeScript:
import SimpleTodoModel = require('todo/model/SimpleTodoModel');

registerSuite({
    name: 'SimpleTodoModel',
    // Assume we have a promises interface defined
    'default data'() {
        var emptyModel = new SimpleTodoModel(),
            id:string = emptyModel.get('id'),
            length:number = emptyModel.get('todos').length,
            incomplete:number = emptyModel.get('incomplete'),
            complete:number = emptyModel.get('complete');
        assert.strictEqual(id, 'todos-dojo',
                    'Id should default to "todos-dojo"');
        assert.strictEqual(length, 0,
                    'Todos array should default to an empty array.');
        assert.strictEqual(incomplete, 0,
                    'Incomplete count should default to 0.');
        assert.strictEqual(complete, 0,
                    'Incomplete count should default to 0.');
    }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接