【问题标题】:How to test an AngularJS/SocketStream/Node.js app using Karma如何使用 Karma 测试 AngularJS/SocketStream/Node.js 应用程序
【发布时间】:2013-05-08 16:45:44
【问题描述】:

我正在开发一个由 SocketStream/node.js 服务器提供的 AngularJS 应用程序。 我有一个 AngularJS 服务,它在 SocketStream 服务器上调用 api 函数,到目前为止进展良好。

但是现在是开始编写第一个测试的时候了,想到的第一个测试框架是 Karma/Jasmine,因为这是推荐的 AngularJS 设置。

到目前为止一切都很好,但是由于我的 AngularJS 模块是使用“require”(SocketStream 的版本,not require.js)导入的,并且服务器 api 调用是测试的一部分,所以我需要配置 Karma加载 SocketStream(至少是它的客户端)。

我仔细查看了“https://github.com/yiwang/angular-phonecat-livescript-socketstream”,但是当我运行这个示例时,我得到了运行时错误,可能是因为我安装了更高版本的各种依赖项。

我通过将 'ss.client.packAssets()' 添加到 app.js 并运行 'SS_PACK=1 node app.js' 来打包我的 SocketStream 应用程序,设法解决了 'required' 问题,但是当我启动 karma 时,它会记录一条错误消息说:

'Chrome 23.0 (Linux) ERROR
    Uncaught TypeError: undefined is not a function
    at /the...path/client/static/assets/app/1368026081351.js:25'

'1368026081351.js' 是 SocketStream 打包的资产文件。如果我不加载它,错误消息类似于'require is undefined',所以我最好的猜测是错误发生在SocketStream require 代码中的某个地方。也因为我在 DEBUG 模式下运行 karma 并且可以看到所有正在服务的文件。

我一直在尝试不同的方法来找出正在发生的事情,但现在有用。所以我的问题是:

还有其他人使用 Karma 成功测试了 AngularJS/SocketStream 吗? 有人对我如何解决或至少调试此问题有任何建议吗? 是否有任何替代/更好的解决方案?

【问题讨论】:

    标签: node.js angularjs karma-runner socketstream


    【解决方案1】:

    是时候回答我自己的问题了:

    有点,因为我得出的结论是 Karma 和 node.js/SocketStream 有很多重叠,所以我决定看看我是否可以完全省略 Karma 并通过 SocketStream 交付 Jasmine 测试平台。事实证明这是可能的,我是这样做的:

    我在“app.js”文件中定义了一个新的 SocketStream 路由和客户端:

    ss.client.define( 'test', {
        view: 'SpecRunner.html',
        css:  ['libs/test'],
        code: ['libs', 'tests', 'app'],
        tmpl: 'none'
    });
    
    ss.http.route( '/test', function(req, res) {
        res.serveClient( 'test' );
    });
    

    我下载了 jasmine-standalone-1.3.1.zip 并将“SpecRunner.html”复制到“client/views”文件夹中。然后我对其进行了编辑以使其加载 AngularJS 和所有 SocketStream 客户端文件,就像所有其他视图一样:

    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.6/angular.min.js"></script>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.6/angular-resource.min.js"></script>
    <SocketStream/>
    

    我删除了导入示例源文件(“Player.js”和“Song.js”)和规范的“脚本”标签,但让最后一个“脚本”块保持不变。

    然后我在“client/css/libs”中创建了一个名为“test”的新文件夹,并将“jasmine.css”原封不动地复制到其中。

    然后我将 'jasmine.js' 和 'jasmine-html.js' 重命名为 '01-jasmine.js' 和 '02-jasmine-html.js' 但未修改,复制到 '/client/code/libs '。

    现在 Jasmine 已就位,将使用“/test”路由调用。稍微不满意的是我还没有找到一个优雅的地方来存储我的规范文件。如果我将它们放在“libs”文件夹中,它们只能工作到目前为止。在其他任何地方,它们都由 SocketStream 作为模块提供服务,并且不会运行。

    但我现在可以忍受。我无需配置特殊的 Karma 设置即可运行 Jasmine 测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-29
      • 2013-05-16
      • 1970-01-01
      相关资源
      最近更新 更多