我开始向我们的Node.js服务器应用程序添加测试,因为我们正在慢慢部署到生产环境中。我有一个API,有许多可能的测试请求。
我的问题是:你如何构建你的测试,这样它就不会成为你很快迷路的大文件?
我为一个 API路由编写了测试(我还有许多其他API路由要测试),这就是它的外观(在Sublime文件概述中):
此测试甚至还没有涵盖所有案例。
我正在使用mocha
,should
和expect
进行验证,superagent
进行API调用。你将如何构建这些测试,以便它不会在一个可怕的大文件中发展?
答案 0 :(得分:26)
有很多方法可以将文件分解为更小,更易于管理的部分。他们中的大多数围绕--recursive
中mocha
标志的使用进行调整。最后,这是个人选择的问题,也适用于团队/个人。
运行mocha
而不使用--recursive
标记,并使用点表示法命名文件。然后,您可以通过HTTP方法进一步细分,如果您愿意,可以通过pass / fail进一步细分。例如,用户路由的文件名应为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功能
与选项1类似,但是,在这种情况下,您将在运行--recursive
时使用mocha
标志并使用文件夹而不是嵌套文件名。
test/
routes/
users/
post.js
get.js
put.js
models/
User.js
这种方法是前两种方法的组合,应该在没有--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
有时大文件是不可避免的,这就是所有优秀文本编辑器都具有代码折叠功能的原因。