您将如何测试此路由代码?
How would you test this route code?
我有以下路线代码。 User
是一个 sequelize model, jwt
is for creating a JWT 标记。
我想避免撞到数据库,所以我想去掉两个依赖项。
User.create return是一个承诺。我希望能够断言 res.json 实际上正在被调用。我认为我的模拟 User.create 应该 return 一个真正的承诺并实现这个承诺。
我想断言 res.json
被调用了。我的测试方法在 Promise 实现之前退出。我没有 return 从我的路线中获取 Promise,所以我不能 return 在我的测试中从 it
中获取它。
鉴于我想模拟依赖项,请告诉我你将如何测试它?
如果您有关于如何更好地构建此代码的建议,请告诉我。
module.exports = function(User, jwt) {
'use strict';
return function(req, res) {
User.create(req.body)
.then(function(user) {
var token = jwt.sign({id: user.id});
res.json({token: token});
})
.catch(function(e) {
});
};
};
我创建了一些用于模拟的文件:用户 jwt,还为您的路由和测试本身创建了两个附加文件。
你可以看到here所有文件,如果你想运行你需要先安装mocha和q:
npm install mocha
npm install q
和运行:mocha
所以我创建了一个名为 res 的对象并添加了一个名为 json 的方法,因此当从您的代码中调用此 json 方法时,我们将知道测试已经通过。
var jwt = require('./jwt.js');
var User = require('./user.js');
var route = require('./route.js');
describe('Testing Route Create User', function () {
it('should respond using json', function (done) {
var user = {
username: 'wilson',
age: 29
};
var res = {};
var req = {};
var routeHandler = route(User, jwt);
req.body = user;
res.json = function (data) {
done();
}
routeHandler(req, res);
});
});
route 变量代表你的模块,routeHandler 是具有接口 function (req, res ) 由您的模块返回。
我有以下路线代码。 User
是一个 sequelize model, jwt
is for creating a JWT 标记。
我想避免撞到数据库,所以我想去掉两个依赖项。
User.create return是一个承诺。我希望能够断言 res.json 实际上正在被调用。我认为我的模拟 User.create 应该 return 一个真正的承诺并实现这个承诺。
我想断言 res.json
被调用了。我的测试方法在 Promise 实现之前退出。我没有 return 从我的路线中获取 Promise,所以我不能 return 在我的测试中从 it
中获取它。
鉴于我想模拟依赖项,请告诉我你将如何测试它?
如果您有关于如何更好地构建此代码的建议,请告诉我。
module.exports = function(User, jwt) {
'use strict';
return function(req, res) {
User.create(req.body)
.then(function(user) {
var token = jwt.sign({id: user.id});
res.json({token: token});
})
.catch(function(e) {
});
};
};
我创建了一些用于模拟的文件:用户 jwt,还为您的路由和测试本身创建了两个附加文件。
你可以看到here所有文件,如果你想运行你需要先安装mocha和q:
npm install mocha
npm install q
和运行:mocha
所以我创建了一个名为 res 的对象并添加了一个名为 json 的方法,因此当从您的代码中调用此 json 方法时,我们将知道测试已经通过。
var jwt = require('./jwt.js');
var User = require('./user.js');
var route = require('./route.js');
describe('Testing Route Create User', function () {
it('should respond using json', function (done) {
var user = {
username: 'wilson',
age: 29
};
var res = {};
var req = {};
var routeHandler = route(User, jwt);
req.body = user;
res.json = function (data) {
done();
}
routeHandler(req, res);
});
});
route 变量代表你的模块,routeHandler 是具有接口 function (req, res ) 由您的模块返回。