“未检测到侦听器”验证错误 Mongoose 和 Mocha

Posted

技术标签:

【中文标题】“未检测到侦听器”验证错误 Mongoose 和 Mocha【英文标题】:"No listeners detected" validation error Mongoose and Mocha 【发布时间】:2015-02-05 19:42:51 【问题描述】:

我正在尝试为我的 express 应用的 POST 功能设置单元测试。

我有以下简单的 Mongoose 架构,其中包含两个字段,其中一个是必需的。

当我在关闭验证/必填字段的情况下进行 mocha 测试时,测试很好,但是当 required 设置为 true 时,测试失败并出现以下错误:

Uncaught: No listeners detected,
throwing. Consider adding an error listener to your connection.
  ValidationError: Path 'title' is required

有什么想法吗?如您所见,我确实满足了架构要求并包含了标题字段。

下面是我的测试:有趣的是,第一个测试似乎工作正常,只有当我尝试发布时它才会产生错误。

describe('Add one story to:\n\thttp://localhost:XXXX/api/stories', function () 

    var testStory = new Story(
        
            title: 'Mocha C title',
            shortTitle: 'Mocha C shortTitle'
        
    );
  
    describe('Story object', function()
        describe('Save story object', function()
            it('should save without error', function(done)

                testStory.save(done);
            )
        )
    );
  
  // ^ That test works

it('Should return 201 or 200', function (done) 
        request(app)
            .post('/api/stories/')
            .send(
                title: 'testing title',
                shortTitle: 'testing short title'
            )
            .end(function(error, res) 
                if(error) 
                    throw error;
                
                done();
            );
    );
);

这是包含架构和验证的模型:

[story.js]

var mongoose = require('mongoose');

var StorySchema = new mongoose.Schema(

    title: 
        type: String,
        required: true
    ,
    shortTitle: String
);

module.exports = mongoose.model('Story', StorySchema);

我还定义了一个控制器:

[stories.js]

var Story = require('../models/story');

exports.postStory = function(req,res,next) 

  var story = new Story();
        story.title = req.body.title;
        story.shortTitle = req.body.shortTitle;

    story.save(function(err) 
        if(err) 
            res.send(err);
            next();
         else 
            res.status(201).json(
                message: 'Story added successfully.', data: story
            );
        
    );
;

我的快递 index.js:

var express = require('express');
var mongoose = require('mongoose');
var bodyParser = require('body-parser');
var storyRoute = require('./routes/story');
var userRoute = require('./routes/user');
var app = express();

mongoose.connect('mongodb://localhost:27017/dbnamehere');


app.use(bodyParser.urlencoded(
  extended: true
));

var router = express.Router();

router.get('/', function(request, response) 
  response.json(
    message: 'Welcome to the dotStory API'
  );
);

router.route('/stories')
  .post(storyRoute.postStory);

app.use('/api', router);

module.exports = app;

【问题讨论】:

【参考方案1】:

尝试将json parser 添加到您的快速申请中

// parse application/json
app.use(bodyParser.json());

【讨论】:

嘿,这很好用,我可以问一下,为什么没有这个 API 可以工作,而且似乎只有测试需要这个?我以为 supertest 默认已经支持解析 json 了?再次感谢!

以上是关于“未检测到侦听器”验证错误 Mongoose 和 Mocha的主要内容,如果未能解决你的问题,请参考以下文章

mongoose 中本地护照的身份验证错误

Mongoose 验证错误:架构配置无效

Mongoose 模型中的自定义实例或静态方法中的验证错误

处理 Mongoose 验证错误——在哪里以及如何处理?

Mongoose 独特和自定义验证

在 React 中获取 Mongoose 验证错误消息