【问题标题】:How to resolve Typescript external dependencies with mocha and node如何使用 mocha 和 node 解决 Typescript 外部依赖项
【发布时间】:2016-04-22 09:03:13
【问题描述】:

我有以下文件;

MyClass.ts

/// <reference path="node_modules/phaser/typescript/phaser.d.ts" />
export class MyClass {
    d: Phaser.Sprite;
    constructor() {
        this.d = new Phaser.Sprite(new Phaser.Game, 10, 10);
    }
    win() : boolean {
        return true;
    }
}

test.ts

/// <reference path="../typings/mocha/mocha.d.ts" />
import MyModule = require('../MyClass'); 

describe('MyClass', () => {   
    var subject : MyModule.MyClass;

    beforeEach(function () {
        subject = new MyModule.MyClass();
    });

    describe('#win', () => {
        it('should pass', () => {
            var result : boolean = subject.win();
            if (result !== true) {
                throw new Error('Expected true but was ' + result);
            }
        });
    });
});

我使用tsd 拉入mocha.d.ts 并使用ts-node 在节点中执行打字稿,所以我按如下方式执行摩卡;

mocha --compilers ts:ts-node/register

编译成功,但是测试在运行时失败,因为没有定义 Phaser;

MyClass
    #win
      1) "before each" hook for "should pass"


  0 passing (47ms)
  1 failing

  1) MyClass "before each" hook for "should pass":
     ReferenceError: Phaser is not defined
      at new MyClass (c:\Users\stafford\Documents\git\ts-node-test\MyClass.ts:5:22)
      at Context.<anonymous> (c:\Users\stafford\Documents\git\ts-node-test\test\test.ts:8:19)
      at callFn (C:\Users\stafford\AppData\Roaming\npm\node_modules\mocha\lib\runnable.js:286:21)
      at Hook.Runnable.run (C:\Users\stafford\AppData\Roaming\npm\node_modules\mocha\lib\runnable.js:279:7)
      at next (C:\Users\stafford\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:297:10)
      at Immediate._onImmediate (C:\Users\stafford\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:319:5)

我以为我必须做类似的事情;

import Phaser = require('phaser');

但这随后会因phaser.d.ts 的错误而中断编译;

phaser.d.ts 不是一个模块。

如何通过命令行执行这样的测试?

repro

【问题讨论】:

  • 我不确定这是否应该为 Phaser 标记。如果你真的认为它应该是,正确的标签是phaser-framework。
  • @JamesSkemp 欢呼,更新。

标签: node.js typescript mocha.js phaser-framework tsd


【解决方案1】:

import Phaser = require('phaser');

您应该使用以下内容创建vendor.d.ts

declare module 'phaser' {
    export = Phaser;
}

这将为您创建一个类型安全的模块phaser。不要忘记还包括 phaser.d.ts :https://github.com/photonstorm/phaser/blob/v2.4.4/typescript/phaser.d.ts

更多

https://basarat.gitbooks.io/typescript/content/docs/project/modules.html

【讨论】:

    猜你喜欢
    • 2016-10-27
    • 2020-12-03
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    • 2018-01-31
    • 2014-04-14
    • 1970-01-01
    • 2023-01-13
    相关资源
    最近更新 更多