簡體   English   中英

我的摩卡咖啡測驗怎么了?

[英]What's wrong with my mocha test?

我已經用express.js和mongoose編寫了這段代碼

routes.js

var mongoose = require('mongoose'),
    logger = require('../logger');

mongoose.connection.on('error', function(){
    logger.info('Mongoose connection error' + error);
});

exports.getitems = function(req, res) {
    mongoose.connect('mongodb://localhost/abhitest', {auto_reconnect: true, native_parser: true}, function(err){        
        if (err) logger.error("Error " + err);
    });
    var Schema = mongoose.Schema;
    var User = new Schema({
        username : {type: String, required: true},
        email : {type: String, required: true}
    }, {collection: 'User'});

    var UserModel = mongoose.model('User', User, 'User');   
    UserModel.find({}, function(err, users){
        if (!err) {
            logger.info('found ' + users);
            res.json(200, users);
        } else {
            logger.error(err);
            res.json(404, 'did not find anything');
        }
    });
};

app.js

var mongoose = require('mongoose'),
    express = require('express'),
    app = express(),
    routes = require('./routes'),
    http = require('http');

app.get('/', routes.getitems);
http.createServer(app).listen(3000);
module.exports = app;

當我從瀏覽器執行此操作時。 我可以看到它從我的mongo數據庫正確返回了結果。

但是,當我為相同的代碼編寫此Mocha測試用例時

var app = require('../app'),
    request = require('supertest'),
    assert = require('assert'),
    _ = require('underscore');

describe('when the test runs', function() {
    it ('should insert 3 records in mongo db', function(done){
        request(app)
        .get('/')       
        .expect('Content-Type', /json/)
        .expect(200)
        .end(function(err, res){
            if (err) console.log(err);          
            else {
                console.log(res.text);
                var items = JSON.parse(res.text);
                for(var i = 0; i < items.length; i++) {
                    var item = items[i];
                    assert(_.has(item, 'username'));
                    assert(_.has(item, 'email'));
                    console.log(item.username);
                    console.log(item.email);
                }
            }
        });
        done();
    });
});

測試用例的輸出只是

1次通過(18ms)

因此,我非常確定它甚至不會進入end方法內部,並且不會在end方法內部打印任何內容。

我可以看到該調用轉到了服務器,但它從未與mongo建立連接。 它只是作為2的readyState掛起。

因此,以某種方式通過Mocha執行測試時...永遠不會連接到mongo並掛在連接上。 但是當通過npm start執行代碼時...一切正常。

摩卡測試用例出了什么問題?

您的done()調用需要在請求回調中進行:

describe('when the test runs', function() {
    it ('should insert 3 records in mongo db', function(done){
        request(app)
        .get('/')       
        .expect('Content-Type', /json/)
        .expect(200)
        .end(function(err, res){
            if (err) console.log(err);          
            else {
                console.log(res.text);
                var items = JSON.parse(res.text);
                for(var i = 0; i < items.length; i++) {
                    var item = items[i];
                    assert(_.has(item, 'username'));
                    assert(_.has(item, 'email'));
                    console.log(item.username);
                    console.log(item.email);
                }
            }
            return done();
        });
    });
});

就目前而言,您done()在請求完成之前調用done()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM