关于gruntjs:找不到grunt-contrib-jasmine PhantomJS API?

grunt-contrib-jasmine can't find PhantomJS API?

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

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

给我错误:

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

我究竟做错了什么?

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


原因

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

可能的解决方案

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

1
window.jsonFile = { some : json_object }

并在规范文件中使用jsonFile引用。

说明

从PhantomJS描述:

PhantomJS is a headless WebKit scriptable with a JavaScript API.

从grunt-contrib-茉莉花描述:

Run jasmine specs headlessly through PhantomJS.

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

最后,执行以下行:.\
ode_modules\\grunt-contrib-jasmine\
ode_modules\\grunt-lib-phantomjs\
ode_modules\\phantomjs\\lib\\phantom\\phantomjs .\
ode_modules\\grunt-contrib-jasmine\
ode_modules\\grunt-lib-phantomjs\\phantomjs\\main.js .\\_SpecRunner.html

这是main.js文件,用于打开页面并绑定抛出警报的记录(alert(jsonString))。

因此,PhantomJS API在main.js中可用,但在_SpecRunner.html和茉莉花规格文件中不可用。

结果与使用浏览器打开_SpecRunner.html相同,除了所有消息将被茉莉花记者截获并显示在屏幕上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  Jasmine Spec Runner

  <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 src="./.grunt/grunt-contrib-jasmine/jasmine-html.js">

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

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

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

  <!-- Jasmine reporter that displays the result-->    
  <script src="./.grunt/grunt-contrib-jasmine/reporter.js">  
  <script src="./.grunt/grunt-contrib-jasmine/jasmine-helper.js">
</head>
<body>
</body>
</html>