我开始向我们的Node.js服务器应用程序添加测试,因为我们正在缓慢地部署到生产环境中。我有一个API,有许多可能的请求要测试。
我的问题是:你如何组织你的测试,使它不会成为一个很快就会迷失的大文件?
我为Sublime 应用编程接口路由编写了测试(我还有许多其他的应用编程接口路由要测试),下面是它的外观(在Sublime文件概述中):
而且这个测试甚至还不能涵盖所有的情况。
我使用mocha
、should
和expect
进行验证,使用superagent
进行API调用。您将如何组织这些测试,使其不会在一个可怕的大文件中发展?
发布于 2013-12-13 00:30:29
有很多方法可以将文件分解为更小、更易于管理的部分。它们中的大多数都围绕着mocha
中--recursive
标志的使用展开。归根结底,这是个人选择的问题,以及什么对团队/个人有效。
选项1:通过点符号实现命名空间
在不带--recursive
标志的情况下运行mocha
,并使用点符号命名文件。然后,您可以通过HTTP方法进一步分解它,如果您愿意,甚至可以通过通过/失败来进一步分解。例如,用户路由的文件名应该是route.user.get.pass.js
,并且位于test/
文件夹的根目录中。此文件的代码将如下所示:
describe('GET /users', function () {
describe('when the request is valid', function () {
it('should return 200 OK');
it('should have unicorns');
it('should have ponies too');
});
});
然后,另一个文件名为route.resource.post.fail.js
的测试将如下所示:
describe('POST /users', function () {
describe('when the request is invalid', function () {
it('should return 400 Bad Request');
...
});
});
在使用mocha
的grep特性时,这使得贪婪的个人测试变得轻而易举
选项2:通过文件夹命名空间
然而,与选项1类似,在这种情况下,您将在运行mocha
时使用--recursive
标志,并使用文件夹而不是嵌套文件名。
test/
routes/
users/
post.js
get.js
put.js
models/
User.js
选项3:使用模块进行分离
这种方法是前两种方法的组合,应该在不使用--recursive
标志的情况下运行。在test
目录的根目录中,您可以将规范文件命名为routes.userSpec.js
,代码如下:
describe('/users', function () {
describe('GET', function () {
var tests = require('./users/get');
it('should return 200 OK', tests.200);
it('should have unicorns', tests.unicorns);
it('should have ponies too', tests.ponies);
});
describe('POST', function () {
var tests = require('./users/post');
it('should return 200 OK', tests.200);
it('should create unicorns', tests.unicorns);
it('should create ponies too', tests.ponies);
});
});
然后在test/users
文件夹中定义模块,如下所示:
test/
users/
get.js
post.js
routes.userSpec.js
选项4:代码折叠
有时大文件是不可避免的,这就是为什么所有好的文本编辑器都有代码折叠功能。
https://stackoverflow.com/questions/20548723
复制相似问题