38

我知道,TypeScript 已经诞生了一天。但我很好奇这里是否有某种单元测试框架或如何为 TypeScript 编写和运行单元测试?

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

4

3 回答 3

21

TypeScript 不是运行时语言。要执行您的 TypeScript 代码,您首先需要将其编译为 JavaScript;同样适用于测试它。你的测试也可以在 TypeScript 中,编译成 JavaScript 并使用你最喜欢的测试框架来执行测试。

于 2012-10-02T18:32:08.037 回答
16

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

很快,我想现有的框架将获得 TypeScript 环境定义文件(更新 - 它们有:http ://definitelytyped.org/ ),这将使它们就 TypeScript 而言是静态类型的。同时,您可能需要阅读环境声明并在测试开始时添加一些您自己的声明。

或者,您可以使用tsUnit TypeScript 单元测试框架,这是一个用 TypeScript 编写的单元测试框架 - 所以它与 TypeScript 配合得很好(也可以在 JavaScript 中使用)。

于 2012-10-02T21:31:26.570 回答
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.');
    }
});
于 2015-09-30T16:50:50.870 回答