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指向编译的输出。其他规格都运行正常。
答案 0 :(得分:6)
require
方法仅适用于服务器方(Nodejs / PhantomJS),但所有茉莉花测试(规范)都在客户端上执行。< / p>
您可以在helpers
文件夹中创建一个包含以下内容的JavaScript文件:
window.jsonFile = { some : json_object }
在规范文件中使用jsonFile
引用。
来自PhantomJS说明:
PhantomJS是一个带有JavaScript API的无头WebKit脚本。
通过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>