6

PhantomJS API 声称允许通过标准 require 接口访问“fs”和一些其他内置的 commonJS 模块。grunt-contrib-jasmine 声称使用 phantomJS 运行所有规范。但是当我使用 grunt-contrib-jasmine 时,require 方法似乎不可用?

fs = require('fs')
describe 'DesignService',  ->
  it 'test loadFromJSON',  ->
    jsonFile = fs.read("resources/sample_pole.json")

给我错误:

 ReferenceError: Can't find variable: require at
>> target/spec/Spec.js:3 

我究竟做错了什么?

如果不清楚,我正在从 coffeescript 编译,然后将 grunt-contrib-jasmine 指向编译的输出。其他规格都运行良好。

4

1 回答 1

6

原因

require方法仅在服务器端(Nodejs/PhantomJS)可用,但所有 jasmine 测试(规范)都在客户端执行。

可能的解决方案

您可以在文件夹中创建一个 JavaScript 文件helpers,其内容如下:

window.jsonFile = { some : json_object }

jsonFile并在您的规范文件中使用参考。

解释

PhantomJS描述:

PhantomJS 是一个可使用 JavaScript API 编写脚本的无头 WebKit。

来自grunt-contrib-jasmine 的描述:

通过 PhantomJS 无头运行 jasmine 规范。

grunt-contrib-jasmine自动创建_SpecRunner.html包含所有用户规范的文件(例如见下文)并将其传递给 PhantomJS。PhantomJS 是一个单独的可执行文件,它在 Nodejs 中仅被包装为一个包。这与从Phantomjs.org页面下载的可执行文件相同。

最后这一行被执行:.\node_modules\grunt-contrib-jasmine\node_modules\grunt-lib-phantomjs\node_modules\phantomjs\lib\phantom\phantomjs .\node_modules\grunt-contrib-jasmine\node_modules\grunt-lib-phantomjs\phantomjs\main.js .\_SpecRunner.html. 这里main.js的文件是打开页面并绑定alert(jsonString)抛出到 grunt 日志的警报 ()。

因此 PhantomJS API 在 中可用main.js,但在_SpecRunner.htmljasmine 规范文件中不可用。

结果和用浏览器打开是一样_SpecRunner.html的,只是所有的消息都会被茉莉记者截获并显示在屏幕上。

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>Jasmine Spec Runner</title>

  <link rel="stylesheet" type="text/css" href=".grunt/grunt-contrib-jasmine/jasmine.css">

  <!-- Jasmine test suite -->
  <script src="./.grunt/grunt-contrib-jasmine/jasmine.js"></script>
  <script src="./.grunt/grunt-contrib-jasmine/jasmine-html.js"></script>

  <!-- Some vendor libraries -->
  <script src="./test/vendor/jquery.js"></script>

  <!-- Some helpers -->
  <script src="./test/helpers/ts.js"></script>

  <!-- Your spec files -->
  <script src="./test/main_spec.js"></script>

  <!-- Jasmine reporter that displays the result-->    
  <script src="./.grunt/grunt-contrib-jasmine/reporter.js"></script>  
  <script src="./.grunt/grunt-contrib-jasmine/jasmine-helper.js"></script>
</head>
<body>
</body>
</html>
于 2013-07-23T04:53:23.680 回答