【发布时间】:2017-03-30 02:55:53
【问题描述】:
我在使用 phantomjs 进行单元测试时遇到了这个问题。那就是我认为浏览器phantomjs不支持导入继承。这是问题的详细信息:
环境:
- 业力 1.5.0
- phantomjs:2.1.1(用作浏览器)
我有这些模型类:
base.model.ts
export class BaseModel {
id?: number;
name?: string;
}
customer.model.ts
import { BaseModel } from './base.model';
export class CustomerModel extends BaseModel {
address?: string;
// more properties defined
}
home.model.ts
import { BaseModel } from './base.model';
import { CustomerModel } from './customer.model';
export class HomeModel extends BaseModel {
param1: CustomerModel;
constructor(data?: any) { // write some logic in here }
}
home.service.ts
import { Injectable } from '@angular/core';
import { Home } from './home.model';
@Injectable()
export class HomeService {
constructor(){ }
get() {
let home = new HomeModel();
}
}
重现行为的步骤
- 为 HomeService 的函数 get() 编写单元测试 (home.service.ts)
- 运行单元测试:
npm run test将执行karma start config/karma.conf.js
错误
PhantomJS 2.1.1 (Windows 8 0.0.0) ERROR TypeError: undefined: can't set as prototype!
根本原因:
经过几天的调查,我发现问题只是在单元测试通过new HomeModel() 时发生的。然后它与BaseModel和extends相关,我想当我们new HomeModel()时,它首先初始化了BaseModel(导入将从上到下运行),然后CustomerModel被初始化。在CustomerModel,它仍然有导入BaseModel到extends。
【问题讨论】:
标签: inheritance phantomjs karma-jasmine