我是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!');
});
});
我要感谢那些回复的人!!
答案 0 :(得分:2)
非常感谢任何帮助!谢谢!
您正在使用内部模块(也称为名称空间)。这意味着你需要以正确的顺序加载文件或以正确的顺序连接。这就是问题所在。
更多相关信息:https://github.com/TypeStrong/atom-typescript/blob/master/docs/out.md
答案 1 :(得分:2)
根据this GitHub issue,Typecript支持位于量角器的Upcoming milestone中。因此,在运行测试之前,您可以将Typescript代码编译为JavaScript。
步骤如下:
使用dashboard.test1.spec.ts
编译规范文件--outFile
:
tsc dashboard.test1.spec.ts --outFile dashboard.test1.spec.out.js
dashboard.test1.spec.out.js
文件。当然,您可以使用任何您觉得方便的名称(但必须指定输出名称),而不是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。