Board logo

标题: 精通 MEAN 测试 MEAN 堆栈(2) [打印本页]

作者: look_w    时间: 2018-11-13 18:50     标题: 精通 MEAN 测试 MEAN 堆栈(2)

理解 Grunt test 任务在您键入 grunt test 时,希望您会问自己,“嗯,我想知道 Grunt                如何运行这些测试。”如您已经知道的,Grunt 运行您的构建脚本。在文本编辑器中打开 gruntfile.js 并一直滚动到文件底部。您可以看到                test 任务正在注册:
1
2
// Test task.
grunt.registerTask('test', ['env:test', 'mochaTest', 'karma:unit']);




grunt.registerTask 的第一个参数是任务的名称 — 在本例中为                test。下一个参数是一个依赖任务数组。test 任务首先设置特定于测试环境的值,然后运行所有在                Mocha 中编写的服务器端测试,最后通过 Karma 启动客户端测试。
在 gruntfile.js 中稍微向上滚动,直到找到 env 任务:
1
2
3
4
5
env: {
    test: {
        NODE_ENV: 'test'
    }
},




此任务仅用于将 NODE_ENV 变量设置为 test。回想一下,此变量帮助 Grunt                确定哪些特定于环境的设置(在本例中位于 config/env/test.js)将会与 config/env/all.js 中的通用设置合并。
如果在文本编辑器中查看 config/env/test.js(如清单 2 所示),就会看到一个自定义的 MongoDB 连接字符串,以及针对各种                OAuth 提供程序的所有 Passport 设置的挂钩(hooks):
清单 2. config/env/test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
'use strict';

module.exports = {
    db: 'mongodb://localhost/test-test',
    port: 3001,
    app: {
        title: 'Test - Test Environment'
    },
    facebook: {
        clientID: process.env.FACEBOOK_ID || 'APP_ID',
        clientSecret: process.env.FACEBOOK_SECRET || 'APP_SECRET',
        callbackURL: 'http://localhost:3000/auth/facebook/callback'
    },
    google: {
        clientID: process.env.GOOGLE_ID || 'APP_ID',
        clientSecret: process.env.GOOGLE_SECRET || 'APP_SECRET',
        callbackURL: 'http://localhost:3000/auth/google/callback'
        },
    // snip
};




这一节是您将 Passport 指向 Meetup 身份验证战略的一个模拟实现的理想位置。因此,在测试运行期间,您就不需要依靠实际用户进行设置,并向                Meetup.com 发送实际的 OAuth 请求。
完成测试环境配置后,Grunt 将会运行您在 Mocha 中编写的所有服务器端测试。以下是 mochaTest 任务:
1
2
3
4
5
6
7
mochaTest: {
    src: watchFiles.mochaTests,
    options: {
        reporter: 'spec',
        require: 'server.js'
    }
},




旋钮(Knobs)和转盘(dials)有关您在运行 Mocha 测试时可调节的旋钮和转盘的更多信息,请参阅   中的                    grunt-mocha-test。

为什么是 Mocha 中编写的服务器端测试,而不是 Jasmine?Mocha 的成熟度、可扩展性和插件使它成为了我最喜爱的测试框架之一。Mocha                是测试 Express 路由、控制器和 MongoDB 交互等方面的可靠的选择。尽管 Mocha 可以轻松地在 Node.js                和浏览器中运行测试,但 AngularJS 团队更喜欢使用 Jasmine 来执行浏览器中的测试。Jasmine 针对客户端测试进行了更多优化,所以                MEAN.JS                开发人员采取了一种一流的方法,并选择了一个强大的服务器端测试框架来测试服务器端,选择了一个强大的客户端测试框架来测试客户端。您应该习惯交替使用两种框架来使用您首选的测试工具。
因为服务器端测试(根据定义)不在浏览器中运行,所以 Mocha 测试不会由 Karma 启动。Jasmine 测试(Grunt                test 依赖项的最后部分)由 karma 任务触发:
1
2
3
4
5
karma: {
    unit: {
        configFile: 'karma.conf.js'
    }
}




在继续分解 karma.conf.js 文件之前,在文本编辑器中打开 package.json。除了                dependencies 块中列出的运行时模块之外,您还可以看到                    devDependencies(开发人员依赖项                的缩写)块中列出的多个构建时依赖项。具体地讲,这个代码块就是在您键入 npm install 时,声明和安装与 Mocha                和 Karma 关联的 Grunt 插件的地方:
1
2
3
4
5
6
7
8
"devDependencies": {
  "grunt-env": "~0.4.1",
  "grunt-mocha-test": "~0.10.0",
  "grunt-karma": "~0.8.2",
  "load-grunt-tasks": "~0.4.0",

  // snip
}






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0