grunt-contrib-jasmine找不到PhantomJS API?

时间:2013-07-16 13:19:29

标签: phantomjs gruntjs

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指向编译的输出。其他规格都运行正常。

1 个答案:

答案 0 :(得分:6)

原因

require方法仅适用于服务器方(Nodejs / PhantomJS),但所有茉莉花测试(规范)都在客户端上执行。< / p>

可能的解决方案

您可以在helpers文件夹中创建一个包含以下内容的JavaScript文件:

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文件用于打开页面并绑定抛出到grunt日志记录中的警报(alert(jsonString))。

所以PhantomJS API在main.js中可用,但不在_SpecRunner.html和jasmine spec文件中。

结果与浏览器打开_SpecRunner.html的结果相同,但所有邮件都会被jasmine记者拦截并显示在屏幕上。

<!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>