【问题标题】:How to setup jasmine for typescript project如何为打字稿项目设置茉莉花
【发布时间】:2015-05-13 20:48:42
【问题描述】:

我需要一些关于如何使用 Jasmine 设置 TypeScript 项目的单元测试的指导。

测试规范文件如下所示:

/// <reference path="../../../typings/tsd.d.ts" />
import {Mediator} from '../../../services/remoting/Mediator';

describe('Mediator', () =>
{
    let mediator: Mediator;

    beforeEach(() => 
    {
        mediator = new Mediator();
    });

    it('blah blah', () =>
    {
        expect(mediator.TEST).toBeDefined();
    });
});

我使用 npm jasmine 模块来运行测试。 jasmine.json 指向构建的 JS 规范文件,如下所示:

{
  "spec_dir": "build/spec",
  "spec_files": [
    "**/*.js"
  ]
}

构建规范文件如下所示:

/// <reference path="../../../typings/tsd.d.ts" />
define(["require", "exports", '../../../services/remoting/Mediator'], function (require, exports, Mediator_1) {
    describe('factory: Mediator', function () {
        var mediator;
        beforeEach(function () {
            mediator = new Mediator_1.Mediator();
        });
        it('should have defined all required fields', function () {
            expect(mediator.ExecuteQuery).toBeDefined();
        });
    });
});
//# sourceMappingURL=Mediator.spec.js.map

当我尝试运行测试时,茉莉花抱怨未定义的“定义”功能:

ReferenceError: define is not defined

我尝试在 TypeScript + Jasmine 上进行搜索,但信息不多(而且我不想使用完整的 VisualStudio)。因此,如果有人能指出如何设置 typescript + jasmine 以及我的错误在哪里,我将不胜感激。

提前致谢。

【问题讨论】:

    标签: typescript jasmine


    【解决方案1】:

    看起来您正在使用 --module amd 标志进行编译,该标志是为异步模块设计的(例如当您使用 RequireJS 时)。

    如果您在 Node 上运行,则需要提供 --module commonjs。这将导致以下输出:

    var mediator_1 = require('../../../services/remoting/Mediator');
    

    (虽然变量的名称可能会改变,因为它会在编译 ES6 样式导入时为您动态创建名称)。

    【讨论】:

    • 感谢您的快速回复。它适用于您的建议。我的项目是一个将在浏览器中运行的 SPA 应用程序。我确实在 VSCode + node.js 中开发它来运行 npm 包等。据我了解,amd 更适合基于浏览器的应用程序,但我确实使用 node.js 工具进行开发 -> 这又需要 common.js。应该用什么?
    • 一个有趣的难题 :) 如果您使用 RequireJS,您将需要使用 --module amd 进行编译以便在浏览器中使用(但继续使用 --module commonjs 进行本地开发)。这两个系统有不同的模块模式。
    • 问题是我不使用RequireJS。到目前为止,我使用的只是普通的 TypeScript。然后我想在出现错误时添加一些单元测试。如果我在使用 -commonjs 标志编译时理解正确,则使用的函数(如“require”)已经是 node.js 的一部分。因此不会发生错误。当我使用 -amd 标志编译时,默认情况下,像“定义”这样的函数由浏览器提供,而不是由 node.js 提供。是这样吗?
    • 如果你的目标是 ES6,模块加载是其中的一部分。如果你的目标是早期版本(比如 ES5),你需要提供一个模块加载器,比如 RequireJS。您可以在此处查看浏览器对 ES6 导入的支持(截至 2015 年 5 月:无):developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
    猜你喜欢
    • 2023-03-16
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    相关资源
    最近更新 更多