我知道,TypeScript 只有一天的历史。但是我很好奇是否有任何单元测试框架或方法可以用来编写和运行 TypeScript 的单元测试?
TypeScript 可以编译成 JavaScript,我可以为该 JavaScript 编写测试,但这不是我想要的。
我知道,TypeScript 只有一天的历史。但是我很好奇是否有任何单元测试框架或方法可以用来编写和运行 TypeScript 的单元测试?
TypeScript 可以编译成 JavaScript,我可以为该 JavaScript 编写测试,但这不是我想要的。
TypeScript不是一种运行时语言。要执行你的TypeScript代码,你首先需要将它编译成JavaScript,测试也是如此。
你的测试也可以使用TypeScript编写,将两者都编译成JavaScript,然后使用你最喜欢的测试框架来执行测试。
ts-mocha
和 ts-node
这样的软件包允许在不生成磁盘上的 js 文件的情况下执行 TypeScript。通常情况下,这是更为可取的,因为它会为您处理源映射,并且不会用编译后的 js 文件混淆您的工作区。当然,我相信仍然会在内存中生成 js,但今天在运行测试之前转码是否最简单或最有效的工作流程我不确定。 - pixelpax您可以使用任何现有的JavaScript单元测试框架在TypeScript或JavaScript中编写单元测试。
不久以后,我想现有的框架将获得TypeScript环境定义文件(更新-他们已经获得:http://definitelytyped.org/),这将使它们在TypeScript方面是静态类型的。与此同时,您可能需要阅读环境声明的相关信息,在测试开始时添加一些环境声明。
或者,您可以使用tsUnit TypeScript Unit Testing Framework,这是一个用TypeScript编写的单元测试框架,因此它与TypeScript兼容(也可以在JavaScript中使用)。
似乎还有另一个测试运行器/框架叫做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.');
}
});