文件

files 数组确定哪些文件包含在浏览器中,由 Karma 监视和提供服务。

files #

类型。 数组 无默认值。 此属性是必需的。 描述。 每个项目要么是字符串(等效于 { pattern: "<string>" }),要么是一个具有以下属性的对象

pattern #

  • 类型。 字符串
  • 无默认值。 此属性是必需的。
  • 描述。 用于匹配的模式。有关如何解析模式的详细信息,请参见下文。

type #

  • 类型。 字符串
  • 默认值。 将尝试根据文件扩展名确定类型。如果失败,则默认为 js
  • 可能的值
    • css - 使用 <link rel="stylesheet"> 标签包含。
    • html - 使用HTML 导入包含。请注意,此功能已过时,在现代浏览器中无法使用。
    • js - 使用 <script></script> 标签包含。
    • module - 使用 <script type="module"></script> 标签包含。
    • dom - 在页面中内联文件的内容。例如,这可用于测试结合 HTML 和 JS 的组件。
  • 描述。 类型确定包含文件的机制。

watched #

  • 类型。 布尔值
  • 默认值。 true
  • 描述。 如果 autoWatchtrue,则所有将 watched 设置为 true 的文件都将被监视以进行更改。

included #

  • 类型。 布尔值

  • 默认值。 true

  • 描述。 文件是否应使用 <script> 标签包含在浏览器中?如果要手动加载它们(例如,使用Require.js),请使用 false

    如果一个文件被多个具有不同 include 属性的模式覆盖,则最具体的模式优先于其他模式。

    模式的具体性定义为六元组,其中较大的元组表示较低的具体性:(nglob parts, nglob star, nstar, next glob, nrange, noptional)。元组按字典顺序进行比较。

    nglob parts 是括号部分展开后模式的数量。例如,模式{0...9} 将产生nglob parts=10。元组的其余部分被确定为每个展开模式中最不具体的。

served #

  • 类型。 布尔值
  • 默认值。 true
  • 描述。 文件是否应由 Karma 的 Web 服务器提供服务?

nocache #

  • 类型。 布尔值
  • 默认值。 false
  • 描述。 文件是否应在 Karma 的 Web 服务器的每次请求时从磁盘提供服务?

integrity #

  • 类型。 字符串
  • 默认值。 undefined
  • 描述。 如果模式是绝对 URL,则将 integrity HTML 属性值设置为加载与给定模式匹配的资源的 <script><link> 标签。

模式匹配和 basePath #

  • 所有相对模式都将首先使用 basePath 解析。
  • 如果 basePath 是相对路径,则将其解析为配置文件所在目录。
  • 最终,所有模式都将使用glob解析为文件,因此您可以使用minimatch表达式,例如 test/unit/**/*.spec.js

排序 #

  • 模式的顺序决定了文件在浏览器中包含的顺序。
  • 匹配单个模式的多个文件按字母顺序排序。
  • 每个文件只包含一次。如果多个模式匹配同一个文件,则将其包含在内,就像它只匹配第一个模式一样。

预处理器转换 #

根据预处理器配置,请注意加载的文件可能会被转换,并且不再以其原始格式可用。例如,如果启用了 html2js 预处理器,则不再提供实际的 .html 文件,而是作为 window.__html__['my.html'] 可用。阅读有关预处理器的更多信息。

完整示例 #

这是一个完整的示例,展示了所有可能的选项

files: [

  // Detailed pattern to include a file. Similarly other options can be used
  { pattern: 'lib/angular.js', watched: false },
  // Prefer to have watched false for library files. No need to watch them for changes

  // simple pattern to load the needed testfiles
  // equal to {pattern: 'test/unit/*.spec.js', watched: true, served: true, included: true}
  'test/unit/*.spec.js',

  // this file gets served but will be ignored by the watcher
  // note if html2js preprocessor is active, reference as `window.__html__['compiled/index.html']`
  {pattern: 'compiled/index.html', watched: false},

  // this file only gets watched and is otherwise ignored
  {pattern: 'app/index.html', included: false, served: false},

  // this file will be served on demand from disk and will be ignored by the watcher
  {pattern: 'compiled/app.js.map', included: false, served: true, watched: false, nocache: true}
],

从另一个服务器加载文件 #

模式也可以是绝对 URL。这允许包含 Karma 未提供的文件。

示例

config.set({
  files: [
    'https://example.com/my-lib.js',
    { pattern: 'https://example.com/my-lib', type: 'js' }
  ]
})

与常规文件路径相比,绝对 URL 有一些特殊规则

  • 不支持通配符,因此每个 URL 必须指定为单独的模式。
  • 大多数常规选项都不受支持
    • watched 始终为 false
    • included 始终为 true
    • served 始终为 false
    • nocache 始终为 false

加载资产 #

默认情况下,所有资产都位于 http://localhost:[PORT]/base/ 上提供服务

加载图像的示例

files: [
  {pattern: 'test/images/*.jpg', watched: false, included: false, served: true, nocache: false}
],

该模式是一个通配符,它匹配指定的图像资产。Watched 和 included 不是必需的,因为图像不是测试。但是,它们需要提供给浏览器。

在这种情况下,可以通过 http://localhost:[PORT]/base/test/images/[MY IMAGE].jpg 访问图像。

请注意 URL 中的 base,它是对您的 basePath 的引用。您无需替换或提供自己的 base

此外,您可以使用代理

proxies: {
  "/img/": "http://localhost:8080/base/test/images/"
},

现在,您可以通过 http://localhost:8080/img/[MY IMAGE].jpg 获取 test/images 中的图像。

8080 更改为您使用的端口。

您还可以使用代理,而无需指定协议、主机名和端口。

proxies: {
  "/img/": "/base/test/images/"
},

Web 服务器功能 #

  • 范围请求.
  • 文件的内存缓存。
  • 监视文件的更新。
  • 代理以更改文件路径。
  • 支持自定义中间件(middleware 配置选项)。