【问题标题】:AngularJS unit tests in TypeScript with Jasmine are not run没有运行带有 Jasmine 的 TypeScript 中的 AngularJS 单元测试
【发布时间】:2015-09-13 02:22:43
【问题描述】:

我在 Visual Studio 2013 的 Web 应用程序中使用 AngularJS 和 TypeScript。我可以在 JavaScript 中运行测试,但使用 TypeScript 编写的测试无法运行。事实上,ReSharper Test Runner 会为每个用 TypeScript 编写的测试显示“测试未运行”状态,我不知道为什么。当我阅读有关此主题的博客时,它们准确地描述了我的工作。

我的这样一个单元测试的代码是:

/// <reference path="../typings/jasmine/jasmine.d.ts" />
/// <reference path="../AngularApp/Models/Member.ts" />
/// <reference path="../AngularApp/Models/Contract.ts" />


describe("Member", () => {
    "use strict";

    var contracts = new Array<App.Controllers.Contract>();
    var sut = new App.Controllers.Member("Elvis", "Presley", "350108-11.2222",
        new Date("1935-01-08"), new Date("1977-08-16"), "M", "Home", "", "90210", "Graceland",
        contracts);

    it("must not be null", () => {
        expect(sut).not.toBeNull();
    });


    it("must contain zero Contracts", () => {
        expect(sut.contracts).not.toBeNull();
        expect(sut.contracts.length).toBe(0);
    });    
});

什么会导致这个问题?

【问题讨论】:

    标签: angularjs unit-testing visual-studio-2013 typescript jasmine


    【解决方案1】:

    您不能直接运行用 typescript 编写的测试,它们需要先转译成 js。由于您使用的是 Visual Studio,我想您的 ts 文件是在保存时编译的,因此您需要检查测试配置文件(例如 Karma.conf.js)以查看它是否在正确的目录中寻找测试。如果要调试 ts 测试文件,Visual Studio 中的测试运行程序必须支持源映射。看看这个 Vs2013 的测试运行器:https://github.com/MortenHoustonLudvigsen/KarmaTestAdapter。它支持源映射。

    【讨论】:

    • 我不使用 Karma,我使用 Jasmine... ReSharper 测试运行程序找到了测试,只是不运行它们。它为每个 TypeScript 测试显示“测试未运行”消息...
    【解决方案2】:

    您可以尝试将测试设置代码包装在 beforeEach 方法中:

    /// <reference path="../typings/jasmine/jasmine.d.ts" />
    /// <reference path="../AngularApp/Models/Member.ts" />
    /// <reference path="../AngularApp/Models/Contract.ts" />
    
    
    describe("Member", () => {
        "use strict";
    
        var contracts : any;
        var sut : any;
    
        beforeEach(() => {
            var contracts = new Array<App.Controllers.Contract>();
            var sut = new App.Controllers.Member("Elvis", "Presley", "350108-11.2222",
                      new Date("1935-01-08"), new Date("1977-08-16"), "M", "Home", "", "90210", "Graceland",
                      contracts);
        });
    
        it("must not be null", () => {
            expect(sut).not.toBeNull();
        });
    
    
        it("must contain zero Contracts", () => {
            expect(sut.contracts).not.toBeNull();
            expect(sut.contracts.length).toBe(0);
        });    
    });
    

    【讨论】:

      【解决方案3】:

      Jasmine 是一个用于测试 JavaScript 的框架。因此,它与 TypeScript 不兼容。您可以使用 TypeScript 并对其进行测试,您必须先使用 Grunt、Gulp 或 Webpack 将其转换为 JavaScript。

      安装 Typescript 包,然后你可以在命令行中使用 tsc 将所有 .ts 文件转换为 .js 文件 - 然后它应该可以工作了。

      我遇到了同样的问题:)

      【讨论】:

        猜你喜欢
        • 2017-07-23
        • 2013-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-12
        • 2020-09-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多