【问题标题】:Karma cannot find angular2 "barrel" import业力找不到 angular2“桶”进口
【发布时间】:2016-05-13 14:25:11
【问题描述】:

我们有一个使用桶导入模式的 Angular2 项目。我正在尝试为它编写单元测试,但是 Karma 似乎找不到桶语句引用的模块。

正在测试的文件导入使用:

import {provider1, provider2, provider3} from "../../../core/providers";
import {component1} from "../../controls";

并且 karma 输出以下警告:

13 05 2016 08:57:43.732:WARN [web-server]: 404: /base/src/app/core/providers
13 05 2016 08:57:43.732:WARN [web-server]: 404: /base/src/app/core/controls

现在加载我们的客户端脚本的 karma 配置文件部分:

// paths loaded via module imports
{ pattern: "src/app/**/*.js", included: false, watched: true },
// paths to support debugging with source maps in dev tools
{ pattern: "src/app/**/*.ts", included: false, watched: false },

这应该加载所有客户端脚本,但我认为由于我正在单元测试的文件使用桶导入,Karma 不知道如何处理它。我也不...

我尝试为这种桶形图案添加代理,但没有成功。

我该怎么办?

【问题讨论】:

    标签: angular karma-runner karma-jasmine


    【解决方案1】:

    事实证明,将 SystemJS 与 Angular2 一起使用,您需要向 SystemJS 配置文件提供有关“桶”含义的信息,否则 TypeScript 在编译项目时将不知道要查找什么。意思是,当你说:

    import {component1} from "../../controls";
    

    TypeScript 默认会查找“../../controls.js”,除非你告诉它不要。在我的主配置文件中,我为这些指定了一些映射,以便 SystemJS 知道要在这些存储桶中查找什么:

    packages: {
      "src/path/path/controls": {
        "main": "index"
      },
      "src/path/path/providers": {
        "main": "index"
      }
    },
    

    但是,我还需要将此添加到 karma-test-shim.js 文件中,以便 Karma 知道要查找的内容。

    将其添加到我的karma-test-shim.js 文件后,它运行良好。

    var packages = {
        "base/src/path/path/controls": {
            "main": "index"
        },
        "base/src/path/path/providers": {
            "main": "index"
        }
    };
    System.config(packages);
    

    【讨论】:

    • 谢谢。救了我一些心痛。由于我想经常重用这种模式并且不想为每个模块添加配置,所以我将直接包含/some/path/index。
    【解决方案2】:

    是行尾

    ...观看:

    被截断了?缺少真/假},

    【讨论】:

    • 在复制/粘贴中被截断,道歉,编辑问题。
    猜你喜欢
    • 1970-01-01
    • 2015-12-27
    • 2017-02-12
    • 1970-01-01
    • 2020-05-19
    • 2017-08-26
    • 1970-01-01
    • 2013-10-12
    • 2017-11-24
    相关资源
    最近更新 更多