Node.js 如何解决Nodejs的单元测试问题?

Node.js 如何解决Nodejs的单元测试问题?,node.js,unit-testing,mocha.js,sinon,Node.js,Unit Testing,Mocha.js,Sinon,我正在尝试对我的代码进行单元测试。 我有这样的想法: testController.js var testController = function(){     var create = function(req, res) {         var params = req.body;         if (!params.title) {             res.status(400)             res.send('title is required’);  

我正在尝试对我的代码进行单元测试。 我有这样的想法:

testController.js

var testController = function(){
    var create = function(req, res) {
        var params = req.body;

        if (!params.title) {
            res.status(400)
            res.send('title is required’);
        }

        //proceed if title is passed
        myModel.create({
            'title': params.title,
        }).then(function(data){
            res.json(data);
        }).catch(function(err){
            res.json(err);
        })
    }
})

testController.spec.js

var sinon = require('sinon'),
    should = require('should’);

describe(‘my test', function(){
    beforeEach(function() {
        testCtrl = require('../controllers/testController');
        models = require('../models');
        myModel = models.myModel;
        testObj = new testCtrl();
    });

    describe(‘my test 1’, function(){
        it('should return 400 if missing title’, function() {
            //no title
            var test_req = {
               'body' : {}
            };
            var test_res = {
                'status': function(){},
                'send':function(){},
                'json':{
                    "test":"test"
                }
            };

            var stub = sinon.stub(myModel, 'create');

            testObj.create(test_req, test_res);

            stub.restore();
        })
    })
})
==>输出类型错误:运行测试时无法读取未定义的属性“then”

所以我的问题是,我期待res.send‘需要标题’;,代码将停止处理查询。但出于某种原因,myModel.create仍然会启动。我对这个框架还不熟悉,不知道到底出了什么问题。有人能帮我吗?谢谢!

看起来您只需要从testController返回create。

是不是您在声明var模型,而在声明之后您正在使用对象模型?您的myModel.create方法是否返回一个thenable?当您从testController返回create时会发生什么?@amenadiel很好,但这只是我的输入错误。您在testController中的myModel放在哪里?你确定myModel.create会返回一个承诺吗?@Pytth我会把它放在代码的顶端。我只是没有在这里发帖。我确信它会返回一个承诺,因为代码是有效的。只有单元测试失败。如果您这样做了,那么您还需要更改testObj.createtest_req,test_res;测试对象测试请求,测试请求;我为我的问题使用了一种变通方法。谢谢你的帮助+1.