打字稿:单元测试和依赖

时间:2016-07-24 14:40:33

标签: typescript ecmascript-6

我很难在Typescript中为我的宠物项目设置单元测试。

考虑以下目录结构

/src
   /test
      unittest.ts
      unittest.html
    main.ts 

main.ts

class Point {
    constructor(public x: number, public y: number) {
    }
}
export { Point };

unittest.ts

import Point from "../main";

function basicTest() {
   let Point = new Point(10, 15);
   // ... 
}

basicTest();

unittest.html

<html>
  <meta charset="UTF-8">
  <head></head>
  <body>
    <script src="unittest.js" charset="utf-8"></script>
  </body>
</html>

编译此代码后tsc src/test/unittest.ts && open src/test/unittests.html

我看到以下错误 ReferenceError: require is not defined

我曾尝试将requirejs添加到unittest.html,但这会导致一些模糊的错误。我还尝试在编译期间使用--module system--module amd,但没有成功。)

我是否错过了一些依赖?

谢谢!

2 个答案:

答案 0 :(得分:2)

您的测试中的导入行将编译为类似......

var foo_1 = require("./foo");

需要配置require语句。 Javascript没有提供开箱即用的模块加载支持。有几种不同的方法可以做。它们都是不同的方法&#34;我如何找到要求的模块并加载它。&#34;我将让您对Javascript中的各种模块解析机制进行一些研究,但有四种主要方法:

  • CommonJS(传统节点/后端机制)
  • AMD(传统浏览器/前端机制)
  • 全球(最早的浏览器方法,不使用require,您只需使用<script>标记引用HTML中的相关库)
  • ES2015(更新的机制意味着统一所有这些方法)。

如果这是一个较新的项目,您可能需要一个支持ES2015风格的工具。 RequireJS是一个支持AMD模块加载的工具。您可能希望查看Webpack或SystemJS,它们是流行的方法。我主要使用SystemJS。您通常不想手动配置SystemJS,我建议使用jspm这样做。您可以找到入门指南here

如果您希望查看Webpack,可以开始使用here

答案 1 :(得分:0)

在这种情况下,解决依赖关系的最简单方法似乎是使用 browserify及其插件tsify

browserify src/test/unittest.ts -p [ tsify --debug ] > src/test/unittest.js