Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Testing 如何使用带有expresso/jasmine/<;的节点测试客户端coffeescript/js;其他>;_Testing_Backbone.js_Coffeescript_Requirejs - Fatal编程技术网

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

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 │  

我有一个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>
我有几个问题(除了在玩zombie.js时,我没有真正使用节点服务器端)

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

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

  • 我遇到的问题是:

    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的文档。特别是,r.js将节点的require替换为自己的require。只要在require.js配置中npm安装的模块不可见,它就可以只加载通过npm安装的节点包/模块

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


    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