gpt4 book ai didi

testing - 如何使用带有 expresso/jasmine/ 的节点测试客户端 coffeescript/js

转载 作者:行者123 更新时间:2023-11-28 19:56:17 24 4
gpt4 key购买 nike

我有一个 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 时没有真正使用节点服务器端)

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

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

我遇到的问题是:

ReferenceError: define is not defined

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

  • 有人这样做吗?
  • 如果您不这样做,您将如何测试您的代码(与 CI 集成的奖励点)?
  • 是否有任何替代 require.js 的方法来管理客户端依赖项,这些方法可能在服务器端发挥得更好?

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

谢谢,本

最佳答案

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

另一个注意事项是 r.js 需要是 main.js 的兄弟文件,main.js 是在节点环境中运行的顶级应用程序 js 文件。

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

关于testing - 如何使用带有 expresso/jasmine/<other> 的节点测试客户端 coffeescript/js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7042560/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com