【问题标题】:Unit test karma with browser phantomJS doesn't support import inheritance带有浏览器 phantomJS 的单元测试业力不支持导入继承
【发布时间】: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();
    }
}

重现行为的步骤

  1. 为 HomeService 的函数 get() 编写单元测试 (home.service.ts)
  2. 运行单元测试: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() 时发生的。然后它与BaseModelextends相关,我想当我们new HomeModel()时,它首先初始化了BaseModel(导入将从上到下运行),然后CustomerModel被初始化。在CustomerModel,它仍然有导入BaseModelextends

【问题讨论】:

    标签: inheritance phantomjs karma-jasmine


    【解决方案1】:

    遇到"typescript": "2.4.0"同样的问题:

    更新了以下依赖并有所帮助:

    "@types/core-js": "0.9.42",
    "html-loader": "^0.5.1",
    "jasmine": "^2.7.0",
    "jasmine-core": "^2.7.0",
    "karma": "^1.7.0",
    "karma-webpack": "^2.0.4",
    

    【讨论】:

      猜你喜欢
      • 2014-05-24
      • 2015-02-24
      • 2016-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-19
      相关资源
      最近更新 更多