Karma - 我可以使用脚本标签而不是 karma.config.files 吗?

Karma - can I use script tags instead of karma.config.files?

Karma 提供了一个名为 customContextFile 的配置选项,它允许用户指定 Karma 将提供的 HTML 文件。

我的问题是 - 我可以直接将 <script> 标签添加到自定义上下文文件吗?还是我必须使用业力配置中的 files 属性 才能在浏览器中加载文件?


更多信息

我想将脚本标签直接放在我的 customContextFile 上,使其看起来类似于 index.html,列出所有供应商文件等。

但是,karma 列出了我添加到自定义上下文文件中的脚本标记的 404。我怀疑这是因为我没有在业力配置文件 属性 中列出这些文件。或者我的脚本标签中的路径有误?

目录结构

.
|--app
|   |--mock
|   |   |--*.json
|   |--scripts
|   |   |--*.ts
|   |--vendor
|   |   |--*.js
|
|--config
|   |--karma.conf.js
|
|--dist
|   |--mock
|   |   |--*.json
|   |--scripts
|   |   |--*.js
|   |--tests
|   |   |--*.js
|   |--vendor
|   |   |--*.js
|   |--specRunner.html
|

config/karma.conf.js

config.set({
    basePath: '../dist',
    frameworks: ['jasmine'],
    reporters: ['dots'],
    port: 9876,
    colors: false,
    logLevel: config.LOG_DEBUG,
    browserNoActivityTimeout: 100000,
    plugins: [
        'karma-chrome-launcher',
        'karma-jasmine'
    ],

    customContextFile: 'specRunner.html',

    files: [
        {pattern: 'vendor/**/*.js', included: false, watched: false},
        {pattern: 'mock/**/*.json', included: false, watched: false},
        {pattern: 'scripts/**/*.js', included: false},
        {pattern: 'tests/**/*.js', included: false}
    ]
    ...

dist/specRunner.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Spec Runner</title>
</head>
<body>

<h1>Thank you for reading this far</h1>

<h2>Karma 404s with each of these</h2>
<script src="jQuery/jquery-1.7.min.js"></script>
<script src="vendor/jQuery/jquery-1.7.min.js"></script>
<script src="dist/vendor/jQuery/jquery-1.7.min.js"></script>

...etc...

<script src="scripts/app.js"></script>
<script src="scripts/x.module.js"></script>
<script src="scripts/y.module.js"></script>
<script src="scripts/z.module.js"></script>

...etc...  

</body>
</html>

Karma 配置中的 files 选项执行多个作业。它的工作之一是告诉 Karma 要创建什么 script 元素。然而,它的另一项工作是告诉 Karma 服务什么脚本。您不能只是手动将 script 元素放入您的 HTML 中并称之为完成。您需要配置 Karma 以便提供文件,因为如果它们未在此处列出,Karma 将不会提供它们。

您可以在配置中使用这样的模式来告诉 Karma 提供文件但不将它们 (included: false) 作为 script 元素包含在页面上:

files: [
  { pattern: "vendor/**/*.js", included: false },
  { pattern: "scripts/**/*.js", included: false },
  // ...
]

还指出所有内容都将在浏览器端的 /base 下提供。因此文件 scripts/app.js 将作为 /base/scripts/app.js 使用,后一个路径是您在 script 中或任何时候引用该文件时必须使用的路径。

如果您对 Karma 看到的内容及其服务方式感到困惑,您可以在浏览器中进入调试模式并检查变量 __karma__.files。它是 Karma 能够提供的文件名映射:键是文件名,每个键的值是文件内容的校验和。