Testing 如何使用带有expresso/jasmine/<;的节点测试客户端coffeescript/js;其他>;
我有一个web应用程序,客户端的东西是用coffeescript编写的,并加载require.js 我希望能够使用基于节点的测试运行程序(如expresso)来隔离和测试这些东西(尽管欢迎其他建议),这样我就可以将客户端测试与我们的CI服务器(目前是Team City)集成 以下是我的目录设置:Testing 如何使用带有expresso/jasmine/<;的节点测试客户端coffeescript/js;其他>;,testing,backbone.js,coffeescript,requirejs,Testing,Backbone.js,Coffeescript,Requirejs,我有一个web应用程序,客户端的东西是用coffeescript编写的,并加载require.js 我希望能够使用基于节点的测试运行程序(如expresso)来隔离和测试这些东西(尽管欢迎其他建议),这样我就可以将客户端测试与我们的CI服务器(目前是Team City)集成 以下是我的目录设置: . ├── coffee │ ├── models │ ├── node_modules │ │ └── expresso │ ├── spec │ ├── tests │
.
├── coffee
│ ├── models
│ ├── node_modules
│ │ └── expresso
│ ├── spec
│ ├── tests
│ └── views
├── static
│ └── js
│ ├── lib
│ ├── models
│ ├── tests
│ └── views
这些都是使用require.js连接起来的,如下所示:
deps = [
"lib/backbone", "models/websocket_collection", "/static/js/lib/date.js"
]
define(deps, (Backbone, ws) ->
# module code and exports here
并加载到浏览器中,如下所示:
<script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="my_mod" src="/static/js/my_mod.js"></script>
我有几个问题(除了在玩zombie.js时,我没有真正使用节点服务器端)
define(function(require, exports, module) {
(function(){
ReferenceError: define is not defined
我还尝试了require(“allplugins require”),这是我加载到浏览器端收集所有客户端代码的脚本,但这似乎打破了node的要求
- 有人这样做吗
- 如果您不这样做,您如何测试您的代码(与CI集成的额外点数)
- 除了require.js管理客户端依赖项之外,还有其他方法可以在服务器端发挥更好的作用吗
本我花了很长时间试图让它发挥作用,最终放弃了。通过在全局变量中引用我的require.js依赖项并将其用于node.js测试,我确实让它工作了,但是设计太难看了,我觉得我已经克服了这一点 我目前的做法是:
- 将我的JavaScript模块编写为CommonJS模块
- 使用测试服务器端的“我的模块”
- 用于使CommonJS模块在客户端工作
- 客户端调试很困难,因为stitch连接了所有脚本。我发现在stitch配置中省略像jQuery这样的库有助于实现这一点
- 我没有任何方法调试服务器端。存在一个节点,但它不适用于节点的最后几个版本
r.js的最新代码将支持将requirejs作为节点模块加载(如require('requirejs'),这将提供更好的集成故事。这一更改将在0.26.0版本中进行。好的,几天的黑客攻击,现在我已经将客户端代码(无论如何,其中一些)打包为commonjs模块,并使用jasmine node进行测试 如果有人感兴趣的话,我已经把jasmine节点分为两个部分,添加了一个xml文件的输出,该文件与CI服务器集成在一起,效果非常好 我会在我完成缝合和跑步后再报告
这是我的建议:谢谢,我正在努力解决的另一件事是如何在r.js下运行测试?也就是说,r.js在哪里被注入到这样一个命令中:“expresso./tests”听起来是一个非常好的方法……在您之前的全局变量解决方案中,您如何定义未定义?
ReferenceError: define is not defined