TypeScript导入导致所有其他代码消失

时间:2016-06-22 08:18:30

标签: typescript jasmine

所以我在root/app/providers/engine/engine.ts中有一堆课程。在我的测试规范文件spec/engine/engine-spec.ts中(spec/文件夹也是茉莉花support/所在的位置)我有一个基本的测试:

///<reference path="../../typings/globals/jasmine/index.d.ts"/>
// By the way this typings reference does exist

import {ClassA, ClassB, ClassC, ClassD, ClassE, EnumThing} from '../../app/providers/engine/engine';

describe('In the classes,', () => {
    describe('ClassA', () => {
        it('exists', () => {
            expect(new ClassA()).toBeDefined();
        });
    });
});

在我的gulpfile我设置test任务以通过tsc运行此内容,然后致电jasmine。但是,通过上面显示的示例,Jasmine找不到规格,只是退出。 tsc生成的输出文件是:

var __extends = (this && this.__extends) || function (d, b) {
    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
    function __() { this.constructor = d; }
    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
///<reference path="../../../typings/globals/lodash/index.d.ts"/>
///<reference path="../../../typings/globals/chance/index.d.ts"/>
// }}}
///<reference path="../../typings/globals/jasmine/index.d.ts"/>

正如您所看到的,这只是TypeScript对类extends的实现,并且所有规范都有一些功能!

如果我注释掉导入并运行一个基本的expect(true).toBe(true)测试,那么它运行正常 - Jasmine找到一个规范并且它成功了。 output.spec.js看起来也很期待:

///<reference path="../../typings/globals/jasmine/index.d.ts"/>
describe('In the classes,', function () {
    describe('ClassA', function () {
        it('exists', function () {
            expect(true).toBe(true);
        });
    });
});

尽管如此,如果出现问题我还是会把gulp test任务放在这里:

// At the top
var gulp = require('gulp');
var tsc = require('gulp-typescript');
var spawn = require('child_process').spawnSync;

// Few unrelated tasks later ...

gulp.task('test', function(done) {
    var stream = gulp.src('spec/**/*.spec.ts')
        .pipe(tsc({
            out: 'output.spec.js',
            target: 'es5'
        }))
        .pipe(gulp.dest('spec/'));

    stream.on('end', function() {
        spawn('jasmine', ['--color', 'spec/output.spec.js'], {
            stdio: 'inherit'
        })
        done();
    });
});

这个问题似乎与tsc本身有关,但我不知道如何解决这个问题。

提前致谢!

1 个答案:

答案 0 :(得分:0)

因此,事实证明,在这种情况下,进口不起作用。相反,添加///<reference path="..."/>评论(路径替换为...)可以正常工作。

这是非常奇怪的行为。虽然我找到了有效的答案,但我仍然非常希望有人编辑这个答案或添加评论来解释为什么会这样。

谢谢!