如何在TypeScript中新建一个类

时间:2015-11-16 22:50:36

标签: javascript requirejs typescript protractor

我是TypeScript的新手,但在C#方面经验丰富。我正在尝试做一些非常简单的事情,而且我缺少一些基本的东西。我正在使用Protractor在Angular前端编写用户测试。我正在使用页面对象模式,我想将页面对象保存在与用户测试不同的文件中,这样我就可以在多个用户测试文件中共享页面对象。

当我尝试新建课程时,我一直收到一个错误,说页面对象类不是函数。我究竟做错了什么?这是我的代码失败的错误:

TypeError:UserTests.DashboardPage不是函数。

页面对象文件:名为dashboard.pageobject.ts

module UserTests {
    export class DashboardPage {
        setupPage = function () {
            console.log("setupPage function");
        };
    }
}

量角器测试文件:名称dashboard.test1.spec.ts

/// <reference path="../../../typings/jasmine.d.ts" />
/// <reference path="../../../typings/angular-protractor.d.ts" />
/// <reference path="../../../typings/selenium-webdriver.d.ts" />
/// <reference path="dashboard.pageobject.ts" />

module UserTests {
    describe('When testing the Dashboard page', function() {
        it('Should pass', function () {
            var page = new UserTests.DashboardPage();
        });
    });
}

错误发生在以下行:var page = new UserTests.DashboardPage();

更新(2015年11月17日):

在阅读了basarat关于内部模块的回复后,我终于将所有部分放在了一起。我从页面对象文件中删除了module关键字,将方法setupPage设为public,并在spec文件中添加了import语句。阅读外部模块让我意识到Node已经将每个文件视为一个模块。 This帖子(也是basarat)将这一点推回家让我公开这个功能。另外,我安装了RequireJS。这是我的最终代码。

页面对象文件:

export class DashboardPage {
    public setupPage = function () {
        console.log("setupPage function");
    };
}

量角器测试文件:

/// <reference path="../../../typings/jasmine.d.ts" />
/// <reference path="../../../typings/angular-protractor.d.ts" />
/// <reference path="../../../typings/selenium-webdriver.d.ts" />

import pageObj = require("./dashboard.pageobject");

describe('When testing the Dashboard page', function() {
    it('Should pass', function () {
        var page = new pageObj.DashboardPage();
        page.setupPage();
        console.log('I made it!');
    });
});

我要感谢那些回复的人!!

2 个答案:

答案 0 :(得分:2)

  

非常感谢任何帮助!谢谢!

您正在使用内部模块(也称为名称空间)。这意味着需要以正确的顺序加载文件或以正确的顺序连接。这就是问题所在。

更多相关信息:https://github.com/TypeStrong/atom-typescript/blob/master/docs/out.md

答案 1 :(得分:2)

根据this GitHub issue,Typecript支持位于量角器的Upcoming milestone中。因此,在运行测试之前,您可以将Typescript代码编译为JavaScript。

步骤如下:

  1. 使用dashboard.test1.spec.ts编译规范文件--outFile

    tsc dashboard.test1.spec.ts --outFile dashboard.test1.spec.out.js
    
  2. 在量角器配置文件中使用新创建的dashboard.test1.spec.out.js文件。
  3. 当然,您可以使用任何您觉得方便的名称(但必须指定输出名称),而不是dashboard.test1.spec.out.js

    两个澄清:

    • 当您使用--outFile选项时,编译器将递归跟随所有引用标记(/// <reference path="file-name.ts" />),然后将所有引用的Typescript文件的已编译JavaScript输出到单个文件(最深的引用将在顶部)。
    • 您可以使用--out代替--outFile。不推荐--out赞成--outFile(请参阅Typescript compiler options),both should work just fine