如何使用带有expresso / jasmine / <other> </other>的节点测试客户端coffeescript / js

时间:2011-08-12 15:36:39

标签: testing backbone.js coffeescript requirejs

我有一个网络应用程序,客户端的东西是用coffeescript编写的,并加载了require.js.

我希望能够使用基于节点的测试运行程序(例如expresso)来隔离和测试这些内容(尽管欢迎其他建议),以便我可以将客户端测试与我们的CI服务器(目前是Team City)集成

这是我的目录设置:

.
├── 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>

在一个创意世界中,我希望能够拥有一个看起来像的测试模块:

{Model1, Model2} = require "models/some_module"

exports.test_a = ->
    assert.equal # etc etc

我有几个问题(除非我使用zombie.js时没有真正使用过节点服务器端)

  1. 如何告诉node我的所有普通javascript依赖项(在static / js / lib中)其中一些是下载的,但是backbone.js已经标记为require.js定义类似的东西

    define(function(require, exports, module) {
        (function(){
    
  2. 我如何实际运行测试?我已经尝试过r.js(根据我的理解,它应该是浏览器端需求和节点需求之间的桥梁)

  3. 我得到的问题是:

    ReferenceError: define is not defined
    

    我也试过要求(“allplugins-require”)这是我加载浏览器端以收集我所有客户端代码的脚本,但这似乎打破了节点的要求。

    • 有人这样做吗?
    • 如果您不这样做,您如何测试您的代码(与CI集成的奖励积分)?
    • require.js的任何替代方法,用于管理可能在服务器端更好的客户端依赖关系?

    我很高兴听到人们正在使用的替代方法。

    谢谢, 本

3 个答案:

答案 0 :(得分:3)

通过节点are here中的r.js运行requirejs的文档。特别是,r.js用自己的节点替换节点的需求。只要npm安装的模块对require.js配置不可见,它就可以加载通过npm安装的仅节点的软件包/模块。

另一个警告是r.js需要是main.js的兄弟文件,这是在节点环境中运行的顶级app js文件。

r.js的最新代码将支持将requirejs作为节点模块加载(如require('requirejs'),这将提供更好的集成故事。该更改将在0.26.0版本中。

答案 1 :(得分:2)

我花了很长时间试图让它发挥作用并最终放弃了。我确实通过引用全局变量中的所有require.js依赖项并将其用于node.js测试来实现它,但设计非常难看,我觉得我已经打败了这一点。

我目前的做法是:

这对我来说效果很好,但需要注意以下几点:

  • 客户端调试很困难,因为stitch连接了我的所有脚本。我发现从针脚配置中省略jQuery之类的库有助于此。
  • 我没有办法调试服务器端。有一个node.js debugger,但它没有与最后几个版本的节点一起使用。

答案 2 :(得分:1)

好的,几天黑客攻击,我现在已经将我的客户端代码(其中一些)打包为commonjs模块并使用jasmine-node进行测试。

如果有人感兴趣我已经分叉jasmine-node来添加与CI服务器集成的xml文件的输出。这很好用。

我会在缝合并运行后报告回来。

这是我的前叉:https://github.com/boothead/jasmine-node