我有一个 Web 应用程序,其中客户端的东西是用 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外,没有真正使用过节点服务器端)
我如何告诉节点我所有的普通 javascript 依赖项在哪里(在 static/js/lib 中)其中一些是下载的,但是backbone.js 已经被标记为 require.js 定义像这样的东西
define(function(require, exports, module) { (function(){
我如何实际运行测试?我试过 r.js (据我所知,它应该是浏览器端要求和节点要求之间的桥梁)
我遇到的问题是:
ReferenceError: define is not defined
我也尝试过 require("allplugins-require") 这是我加载浏览器端以收集所有客户端代码的脚本,但这似乎破坏了节点的要求。
- 有人这样做吗?
- 如果您不这样做,您将如何测试您的代码(与 CI 集成的奖励积分)?
- 用于管理客户端依赖项的 require.js 的任何替代方案可能在服务器端发挥更好的作用?
我很高兴听到人们正在使用的替代方法。
谢谢,本