如何使用karma / jasmine组合SystemJs相对路径和测试

时间:2016-10-06 11:51:07

标签: angular jasmine karma-runner karma-jasmine systemjs

我目前在我的.ts文件中使用此语法在我的组件中使用systemJs相对路径:

    var height:NSLayoutConstraint = NSLayoutConstraint(item: alertController.view, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 200);

    var width : NSLayoutConstraint = NSLayoutConstraint(item: alertController.view, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 300);

    alertController.view.addConstraint(height);

     alertController.view.addConstraint(width);

一切正常,直到我想在测试中导入此组件。我从业力中得到了以下非详细错误:

declare var __moduleName:string;

@Component({
  moduleId: __moduleName,
  ...
})
...

如果我删除该行:

Chrome 52.0.2743 (Linux 0.0.0) ERROR
{
  "originalErr": {}
}

来自组件transcrypted .js文件,我的所有测试都运行良好。

如果有人知道如何将这个systemjs relative-paths语法和karma / jasmine工具结合起来,那将是受欢迎的。

1 个答案:

答案 0 :(得分:2)

目前,Angular2的最佳做法是使用commonjsmoduleId条目,并使用commonjs编译您的应用。

tsconfig.json:

{
  "compilerOptions": {
    "module": "commonjs",
    ...
    ...
  }
}

使用commonjs编译可以正常使用karma / jasmine和angular2。

您只需要替换

@Component({
  moduleId: __moduleName,
  ...
})
...

@Component({
  moduleId: module.id,
  ...
})
...

并删除

declare var __moduleName:string;