在express.js中对诺言进行单元测试

时间:2018-08-09 17:28:15

标签: node.js unit-testing express mongoose proxyquire

我在节点上有一个快速应用,它使用存储库来掩盖猫鼬模型的使用。

route.js

router.get('/', function (req, res) {
    entries = entryRepository.findAll({}, function (rest, entries) {
        res.render('entries/index', {entries: entries});
    });
});

Entry-repository.js

class EntryMongoRepository {

    constructor() {
        console.log('lskjfd');
        mongoose = require('mongoose');
        mongoose.connect(process.env.MONGO_CONNECTIONG);
        this.Entry = mongoose.model('Entry', entrySchema);
        this.con = mongoose.connection
    }

    insert(data) {
        this.con.collection('entries').insert(data);
    }

    insertSeed() {
        var entry = {
            content: "lalalal",
            date: Date.now(),
            locations: [
                {
                    type: 'Feature',
                    coordinates: [52.102095, 5.098283],
                    properties: {'name': 'Hallo'}
                },
                {
                    type: 'Feature',
                    coordinates: [52.126178, 5.157987],
                    properties: {'name': 'Hallo'}
                }]
        };
        this.con.collection('entries').insert(entry);
    }

    findAll(params, cb) {
        return this.Entry.find({}).exec(cb);
    }
}

现在。我想测试这条路线。因此,我想模拟存储库,因为我可能可以对它进行单独的单元测试(我认为是)。所以我做了以下(没用的)

  • 模拟EntryRepository
  • 通过proxyquire插入模拟的EntryRepositoryStub
  • 使用超级测试和非监听应用来创建一种测试路线的方法

这是目前的测试,没有proxyquire,因为它没有用。有什么想法吗?

test.js

//During the test the env variable is set to test
process.env.NODE_ENV = 'test';

// require dev-dependencies
const request = require('supertest');
const route = require('../routes/entries'); //reference to you app.js file

var express = require('express');
var app = express();
route(app);
describe('GET /users', function () {
    it('should respond on the test case', function (done) {
        request(app)
            .get('/entries/test')
            .expect(200, done);
    });
    it('Should 404 on unknown page', function (done) {
        request(app)
            .get('/entries/thisisnotapage')
            .expect(404, done);
    });
});

我如何在无需通过测试数据库的情况下对这条路线进行单元测试?

0 个答案:

没有答案