为什么我需要为 karma config 指定所有文件,即使它们加载了 requirejs

why do I need to specify all files for karma config even if they are loaded with requirejs

本文关键字:文件 requirejs 加载 karma config 为什么      更新时间:2023-09-26

我有以下目录结构:

--app
  |---dots
  |    |---some.js
  |
  |---entry.js
  |---bootstrap.js
  |---karma.conf.js
  |---test-main.js
  |---test
      |---sampleSpec.js

这是我sampleSpec依赖项:

define(["app/bootstrap", "app/dots/some"], function () {}]

因此,据我了解,我使用 requirejs 将bootstrap文件加载并some到浏览器中。但是,根据我是否在karma.conf.js文件中指定dots/*文件夹,karma 服务器成功或失败解析dots/some.js文件。我的意思是,如果我在karma.conf.js中指定以下pattern: 'app/**/*.js'

files: [
  'test-main.js',
  {pattern: 'app/**/*.js', included: false},
  {pattern: 'test/*Spec.js', included: false}
],

dots/some.js文件加载到浏览器中,如果我这样指定pattern: 'app/*.js' karma 服务器将返回404 - 找不到文件。为什么会这样?如果我使用 requirejs 加载路径,karma为什么要关心路径?

当你激发业力时,业力的作用是:

  • 它做一些预处理工作
  • 它创建一个网页,在其中加载您的网络资产(css,js等...
  • 它创建一个网络服务器来为您的资产提供服务

网络服务器需要知道您在哪里拥有自己的资产,以及您是想直接从页面提供它们还是稍后加载它们。

在您的 karma 配置文件中,您有几个选项来配置您希望如何加载它们:

...
files: [
   'test-main.js',
   {pattern: 'app/**/*.js', included: true, watched: false, served: true},
   ...
],
proxies: {
  '/img/': 'http://localhost:8080/base/test/images/'
}

files数组中,您可以放置要包含,监视和提供的所有资源。

如果你想改用自定义URL(假设

你的应用程序中有一个特定的路由),你可以告诉karma如何将该自定义URL反映到静态URL或简单地映射它(假设你正在使用第三方服务)。

如果一个文件没有被映射,业力就不会提供它,所以当你需要它时,你的请求将有一个HTTP 404响应。
Karma 也接受正则表达式模式(迷你匹配字符串)作为路由 - 如文档中指定的那样 - 因此您的app/**/*.js将匹配任何级别app中的任何 js 文件,而app/*.js将仅匹配 app 文件夹中的 JS 文件。

在代理的情况下,假设你有兴趣提供图像,karma 会设置一个静态服务器,http://localhost:8080/base在其中映射你的项目根目录。

有关完整的解释,请查看业力文档。