Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 您将如何测试此路线代码?_Javascript_Node.js_Unit Testing_Express_Sequelize.js - Fatal编程技术网

Javascript 您将如何测试此路线代码?

Javascript 您将如何测试此路线代码?,javascript,node.js,unit-testing,express,sequelize.js,Javascript,Node.js,Unit Testing,Express,Sequelize.js,我有下面的路线代码User是一个模型,jwt用于创建令牌 我想避免碰到数据库,所以我想去掉这两个依赖项 User.create返回一个承诺。我希望能够断言res.json实际上正在被调用。我认为我的mock User.create应该返回一个真正的承诺并履行该承诺 我想断言调用了res.json。我的测试方法在承诺兑现之前就已经存在了。我不会从我的路线返回承诺,因此我无法从测试中的it返回承诺 鉴于我想模拟依赖项,请告诉我如何测试它 如果你有一个如何更好地构造这个代码的建议,请让我知道 modu

我有下面的路线代码
User
是一个模型,
jwt
用于创建令牌

我想避免碰到数据库,所以我想去掉这两个依赖项

User.create返回一个承诺。我希望能够断言res.json实际上正在被调用。我认为我的mock User.create应该返回一个真正的承诺并履行该承诺

我想断言调用了
res.json
。我的测试方法在承诺兑现之前就已经存在了。我不会从我的路线返回承诺,因此我无法从测试中的
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还为您的路由和测试本身创建了两个附加文件

您可以查看所有文件,如果要运行,您需要首先安装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是带有接口的函数,该接口包含模块返回的函数(req,res)。

谢谢。我试图避免使用done,但这已经足够好了。