原因
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.html
jasmine 规范文件中不可用。
结果和用浏览器打开是一样_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>