摩卡如何公开节点控制器函数来测试脚本
Mocha how to expose a node controller function to test script
这是我的foo-controller.js
。
module.exports = function(params) {
var router = require('express').Router();
var db = params.db
var controller = {};
controller.getFoo = function (req, res) {
// returns something
}
router.get('/foo', controller.getFoo);
return router;
};
这是我的test.js
.
var chai = require('chai');
var expect = require('chai').expect;
var bar = require('../api/controllers/bar/foo-controller');
console.log("Test", bar) // <- this returns the whole foo-controlelr.js
describe('Foo', function() {
it('should blah blah', function() {
});
});
但每次我使用bar.getFoo()
<-我想测试的功能。它返回错误has no method 'getFoo'
访问控制器的 getFoo 函数需要通过 module.exports 导出此函数。但是上面的代码不会导出控制器,而是导出路由器,这完全没问题,因为路由器用于在 Express 中安装路由器。
为了测试控制器,您可以在自己的模块中拆分路由/路由定义和控制器:
foo-controller.js
module.exports = function(params) {
var db = params.db
var controller = {};
controller.getFoo = function (req, res) {
// returns something
}
return controller;
};
foo-router.js
var fooController = require('./foo-controller');
module.exports = function(params) {
var router = require('express').Router();
var controller = fooController(params);
router.get('/foo', controller.getFoo);
return router;
};
这使您能够在没有路由器的情况下测试控制器。
测试代码的另一种方法是进行"集成"测试,同时测试路由器和控制器。使用像supertest(https://github.com/visionmedia/supertest)这样的工具,你可以像这样编写集成测试:
var request = require('supertest');
var express = require('express');
var fooRouter = require('.path/to/router/foo');
describe('Foo', function() {
it('should blah blah', function(done) {
var app = express();
app.use('/', fooRouter(params));
request(app)
.get('/foo')
.expect(200)
.end(function(err, res){
if (err) throw err;
done();
});
});
});
});
此方法的优点是测试路由定义加上控制器。
相关文章:
- 为什么我的控制器没有启动函数.js脚本
- 可以'我无法在Jade测试脚本中使用BeCalled()
- 从函数(咖啡脚本)内以定时间隔触发函数
- 如何编写一个函数的脚本,为HTML中显示的JavaScript计数计时器添加秒数
- 使用 for 循环中的函数测试字符串时,我一直陷入无限循环
- 使用函数(java脚本)将值设置为对象
- 在我的测试脚本中,我运行了 if 语句,但我从未运行过其他语句?我做错了什么
- 如何使 Tampermonkey 添加的函数在脚本运行后在控制台中可用
- 将函数的脚本内容转换为字符串
- 摩卡如何公开节点控制器函数来测试脚本
- JavaScript 声明的函数在脚本加载时消耗多少内存
- 如何使 PHP 函数等到脚本结束执行
- 单独的回调函数 Java 脚本
- 如何使用一个函数测试Angular控制器,该函数可以在不嘲笑AJAX调用的情况下进行AJAX调用
- 如何在多个环境(终端和浏览器)中运行JavaScript测试脚本
- 当用户在输入id=“”中填充文本时,如何调用函数java脚本;value_ 1”;然后按键盘上的“Enter”
- 在node.js测试脚本中包括通过bower安装的主干网
- 我需要帮助在测试脚本
- 使用jQuery插入一个包含函数的脚本
- "TypeError:obj.indexOf不是函数“”;编写selenium测试脚本时出错