node.js - 如何使用 Karma 测试 AngularJS/SocketStream/Node.js 应用程序

标签 node.js angularjs karma-runner socketstream

我正在开发一个由 SocketStream/node.js 服务器交付的 AngularJS 应用程序。 我有一个 AngularJS 服务,可以调用 SocketStream 服务器上的 api 函数,到目前为止进展顺利。

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

到目前为止一切顺利,但由于我的 AngularJS 模块是使用“require”(SocketStream 的版本,不是 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 吗? 有人对我如何解决或至少调试这个问题有任何建议吗? 有其他替代方案/更好的解决方案吗?

最佳答案

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

大概是这样,因为我得出的结论是 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 客户端文件,就像所有其他 View 一样:

<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”)和规范的“script”标签,但保留了最后一个“script” block ,未进行修改。

然后,我在“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 作为模块提供服务,并且不会运行。

但我现在可以忍受这一点。我可以运行 Jasmine 测试,而无需配置特殊的 Karma 设置。

关于node.js - 如何使用 Karma 测试 AngularJS/SocketStream/Node.js 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16445963/

相关文章:

javascript - 为什么我的 Async 和 Await 仍然没有完成序列执行的工作

node.js - MS Graph API 和 DriveItem 搜索不适用于客户端凭据流

node.js - nodejs FFMPEG参数问题

javascript - AngularJS Karma 测试规范 Promise 未解决且 .then() 未调用

javascript - Gulp 任务不访问 karma.conf.js 文件

node.js - Yeoman 角度生成器安装运行,但生成器未出现在生成器列表中

javascript - iScroll5 和 Angularjs 1.2 不工作

javascript - angular-ui ui-calendar 不更新事件源对象/ng-model 的更改

angularjs - 如何让 $q 等待多个异步任务?

linux - 当主机更改源 grunt/karma 未检测到它时,在 vagrant 上进行 grunt karma 测试