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

时间:2015-01-12 17:16:52

标签: javascript requirejs karma-runner

我有以下目录结构:

--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将bootstrapsome文件加载到浏览器中。但是,根据我是否在dots/*文件中指定karma.conf.js文件夹,karma服务器成功或无法解析dots/some.js文件。我的意思是如果我在pattern: 'app/**/*.js'中指定以下karma.conf.js

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

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

1 个答案:

答案 0 :(得分:13)

当你解雇业力时,业力的作用是:

  • 它做了一些预处理工作
  • 它会创建一个网页,用于加载您的网站资源(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数组中,您可以放置​​要包含,观看和投放的所有资源。

如果您想要使用自定义网址(假设您的应用中有特定路线),您可以告诉业力如何将该自定义网址反映到静态网址,或者只是为了映射它(比如说你好了)使用第三方服务。)

如果某个文件没有映射,那么业力就无法投放,所以当您要求时,您的请求会有HTTP 404响应。 Karma还接受regexp模式(迷你匹配字符串)作为路由 - 如文档中所指定 - 因此app/**/*.js将匹配app中任何级别的任何js文件,而app/*.js仅匹配JS文件严格位于app文件夹中。

如果是代理,说您有兴趣提供图片,karma会设置一个静态服务器,http://localhost:8080/base映射您的项目根目录。

如需完整说明,请查看karma documentation