Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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
用KrakenJS对Mongoose模型进行单元测试_Mongoose_Mocha.js_Kraken.js - Fatal编程技术网

用KrakenJS对Mongoose模型进行单元测试

用KrakenJS对Mongoose模型进行单元测试,mongoose,mocha.js,kraken.js,Mongoose,Mocha.js,Kraken.js,我正在尝试对passport进行单元测试,以便用户登录。在passport调用之前,我想插入一个使用Mongoose模型的用户。如果我在测试中直接与Mongoose连接,我可以插入测试用户。然而,我似乎无法使用Kraken在Beforeach中创建的应用程序连接 救命电话挂断了 login.js测试: 'use strict'; var app = require('../index'), kraken = require('kraken-js'), nconf = requir

我正在尝试对passport进行单元测试,以便用户登录。在passport调用之前,我想插入一个使用Mongoose模型的用户。如果我在测试中直接与Mongoose连接,我可以插入测试用户。然而,我似乎无法使用Kraken在Beforeach中创建的应用程序连接

救命电话挂断了

login.js测试:

'use strict';
var app = require('../index'),
    kraken = require('kraken-js'),
    nconf = require('nconf'),
    request = require('supertest'),
    mongoose = require('mongoose'),
    should = require('chai').should(),
    User = mongoose.model('User'),
    request = require('supertest'),
    agent,
    env = process.env.NODE_ENV || 'testing';


nconf.use('file', {
    file: process.cwd() + '/config/app.json',
    format: nconf.formats.json
});
var dbConf = nconf.get('databaseConfig')[env];

//mongoose
/*if (mongoose.connection.db) {
    return
} else {
    mongoose.connect("mongodb://" + dbConf.host + '/' + dbConf.database);
    db = mongoose.connection;
}*/

describe('login', function () {

    var mock;

    beforeEach(function (done) {
        kraken.create(app).listen(function (err, server) {
            mock = server;
            agent = request.agent(app);
            done(err);
        });
    });


    afterEach(function (done) {
        mock.close(done);
    });

    describe('User', function () {
        console.log('user time');
        before(function (done) {
            var user = new User({
                email: "user@user.com",
                firstName: "first",
                lastName: "last",
                password: "pass11",
                userName: 'someone'
            });
            user.save(function (err, user) {
                console.log('user: ' + user);
                console.log('err: ' + err);
                done();
            })
        });
        describe('Login test', function () {
            it('should redirect to /home', function (done) {
                agent
                    .post('/users/session')
                    .field('userName', 'someone')
                    .field('password', 'pass11')
                    .expect('Location', '/home')
                    .end(done)
            })

            after(function (done) {
                //User.remove().exec();
                return done();
            });

        })
    })


});

我对猫鼬不是很熟悉,但我认为这里的问题是事情并没有按照你认为的顺序发生。这是一个与测试结构相同的骨架:

describe('login', function () {
    beforeEach(function () {
        console.log("beforeEach");
    });
    afterEach(function () {
        console.log("afterEach");
    });
    describe('User', function () {
        before(function () {
            console.log("before");
        });
        describe('Login test', function () {
            it('should redirect to /home', function () {
                console.log("test");
            });
            after(function () {
                console.log("after");
            });

        })
    })
});
如果在此代码上运行Mocha,您将获得以下输出(funky间距和所有):

请注意如何在您的
beforeach
之前调用
beforeach
回调。因此,在建立连接之前,您的用户被创建,对
save
的调用被完成。在我看来,更改代码以便在所有测试之前只创建一次连接,并且在测试之后只关闭一次连接是一种可行的方法。如果要执行此操作,您需要将
beforeach
更改为
beforeach
并将
afterEach
更改为
after

  login
    User
before
      Login test
beforeEach
test
        ✓ should redirect to /home 
afterEach
after


  1 passing (5ms)