为什么 Karma 拒绝提供我的 JSON 夹具(我想在我的 jasmine/angularjs 测试中使用它)

2022-01-11 00:00:00 json jasmine javascript karma-runner

如此 stackoverflow 答案,看起来 Karma 将提供 JSON 固定装置.但是,我花了太多时间试图让它在我的环境中工作.原因:我正在进行角度测试,需要将模拟 HTTP 结果加载到测试中,因为 Jasmine 不支持任何全局设置/拆卸模拟服务器和其他东西.

As indicated in this stackoverflow answer, it looks like Karma will serve JSON fixtures. However, I've spent too many hours trying to get it to work in my environment. Reason: I'm doing angular testing and need to load mock HTTP results into the test, as Jasmine doesn't support any global setup/teardown with mock servers and stuff.

在我的 karma 配置文件中,我这样定义一个夹具:

In my karma config file, I'm defining a fixture as so:

files: [
  // angular 
  'angular/angular.min.js',
  'angular/angular-route.js',
  'angular/mock/angular-mocks.js',

  // jasmine jquery helper
 'jquery-1.10.2.min.js',
 'angular/jasmine-jquery.js',

  // our app
  '../public/js/FooApp.js',

  // our tests
  'angular/*-spec.js',

  // fixtures
  { pattern: 'node/mock/factoryResults.json',
    watched: 'true',
    served:  'true',
    included: 'false' }
]

在我尝试在我的 jasmine 测试中使用 jasmine-jquery.js 加载 JSON 之前,我看到 karma 在尝试为它提供服务时窒息:

Before I even attempt to use jasmine-jquery.js in my jasmine test to load the JSON, I see karma choking on trying to serve it:

...
DEBUG [web-server]: serving: /Users/XXX/FooApp/spec/node/mock/factoryResults.json
Firefox 25.0.0 (Mac OS X 10.8) ERROR
    SyntaxError: missing ; before statement
    at /Users/XXX/FooApp/spec/node/mock/factoryResults.json:1
...

这是 factoryResults.json 的样子:

Here's what factoryResults.json looks like:

{ "why": "WHY" }

知道这里发生了什么吗?我在网上看到很多通过业力装置成功地将 JSON 加载到 jasmine 测试中的例子.业力可以看到文件;如果我在我的夹具块中放置了错误的路径,我会看到一个错误,指出它找不到任何与我的夹具模式匹配的文件.我尝试过以不同方式重新格式化 .json 文件...有什么想法吗?

Any idea what's going on here? I see plenty of examples on the web of folks successfully loading JSON into jasmine tests via karma fixtures. Karma can see the file; if I put the wrong path in my fixture block, I see an error stating that it couldn't find any files that match my fixture pattern. I've tried reformatting the .json file in different ways... Any ideas?

推荐答案

你的问题是 'false' 必须是布尔值,而不是字符串.

Your problem is that 'false' has to be a boolean, not a string.

已经有一个问题来更好地验证配置并修复这样的问题错误.

There is already an issue to validate the config better and fix such a mistakes.

另外,您可以编写一个简单的json"预处理器(类似于 karma-html2js) 将使其成为有效的 JS 并将 JSON 放入某个全局命名空间中,以便您可以保持测试同步...

Also, you might write a simple "json" preprocessor (similar to karma-html2js) that would make it valid JS and put the JSON into some global namespace so that you can keep the tests synchronous...

相关文章