Как настроить тесты Mocha с Node.js и Passport

Как в приложении, построенном с Node.js (CompoundJS + PassportJS), как тесты Mocha могут выполняться на контроллерах, которые заблокированы и требуют входа в систему? Я пытался использовать Superagent, но мне не очень повезло, и чтобы использовать его, сервер должен быть запущен для запуска тестов. Я'мы очень близко подошли к этому методу, но нене нужно, чтобы сервер работал для запуска модульных тестов.

Я также попытался в том числе паспорт и использованиеrequest.login метод, я оказался в точке, где я продолжал получать ошибкуpassport.initialize() промежуточное программное обеспечение не используется.

Я пытаюсь придерживаться сгенерированных тестов CompoundJS, которые прекрасно работали, пока не включилась аутентификация. Тесты CompoundJS по умолчанию запускаютinit.js файл, в котором будет удобно обрабатывать аутентификацию и каким-то образом сделать доступным для каждого теста контроллера:

require('should');
global.getApp = function(done) {
    var app = require('compound').createServer()
    app.renderedViews = [];
    app.flashedMessages = {};

    // Monkeypatch app#render so that it exposes the rendered view files
    app._render = app.render;
    app.render = function(viewName, opts, fn) {
        app.renderedViews.push(viewName);

        // Deep-copy flash messages
        var flashes = opts.request.session.flash;
        for (var type in flashes) {
            app.flashedMessages[type] = [];
            for (var i in flashes[type]) {
                app.flashedMessages[type].push(flashes[type][i]);
            }
        }

        return app._render.apply(this, arguments);
    }

    // Check whether a view has been rendered
    app.didRender = function(viewRegex) {
        var didRender = false;
        app.renderedViews.forEach(function(renderedView) {
            if (renderedView.match(viewRegex)) {
                didRender = true;
            }
        });
        return didRender;
    }

    // Check whether a flash has been called
    app.didFlash = function(type) {
        return !!(app.flashedMessages[type]);
    }

    return app;
};

Контроллеры / users_controller_test.js

var app,
    compound,
    request = require('supertest'),
    sinon = require('sinon');

/** 
 * TODO: User CREATION and EDITs should be tested, with PASSPORT
 * functionality.
 */

function UserStub() {
    return {
        displayName: '',
        email: ''
    };
}

describe('UserController', function() {
    beforeEach(function(done) {
        app = getApp();
        compound = app.compound;
        compound.on('ready', function() {
            done();
        });
    });

    /**
     * GET /users
     * Should render users/index.ejs
     */
    it('should render "index" template on GET /users', function(done) {
        request(app)
            .get('/users')
            .end(function(err, res) {
                res.statusCode.should.equal(200);
                app.didRender(/users\/index\.ejs$/i).should.be.true;
                done();
            });
    });

    /*
     * GET /users/:id
     * Should render users/index.ejs
     */
    it('should access User#find and render "show" template on GET /users/:id',
        function(done) {
            var User = app.models.User;

            // Mock User#find
            User.find = sinon.spy(function(id, callback) {
                callback(null, new User);
            });

            request(app)
                .get('/users/42')
                .end(function(err, res) {
                    res.statusCode.should.equal(200);
                    User.find.calledWith('42').should.be.true;
                    app.didRender(/users\/show\.ejs$/i).should.be.true;

                    done();
                });
        });
});

Все они терпят неудачу либо сAssertionError: expected 403 to equal 200 или жеAssertionError: expected false to be true

Ответы на вопрос(1)

Ваш ответ на вопрос