Proyecto Liqueed (6)

Published on Author lopez

Anterior Post

Sigamos viendo algun test de test/personapi.js en el proyecto:

https://github.com/liquid-co-ops/liqueed

Hay entradas en la API que se llaman por PUT o POST, y reciben datos en el cuerpo del mensaje enviado. En Express, usando el middleware adecuado, ese mensaje es analizado y convertido en un objecto JSON, y puesto en el campo body del objeto request original. Pues bien, si nuestra entrada en la API usa ese campo, se lo tenemos que entregar en el test. Un ejemplo:

exports['login person'] = function (test) {
    test.async();
    
    var request = {
        body: {
            username: persons[1].username,
            password: persons[1].username
        }
    };

    var response = {
        send: function (model) {
            test.ok(model);
            test.equal(model.id, persons[1].id);
            test.equal(model.name, persons[1].name);
            test.equal(model.username, persons[1].username);
            
            test.done();
        }
    };
    
    controller.loginPerson(request, response);
};

Como antes, en el response ponemos la función send, que esperamos se invoque asincrónicamente para dar por ejecutado el test.

Otro ejemplo donde no sólo enviamos body sino también parámetros (esos parámetros en general están en la ruta, y Express los toma de ahí y nos lo deja en request.params:

exports['change password first person'] = function (test) {
    test.async();
    
    var request = {
		params : {
			id : persons[0].id.toString()
		},
        body: {
            password: 'new' + persons[0].username
        }
    };

    async()
    .then(function (data, next) {
        var response = {
            send: function (model) {
                test.ok(model);
                test.strictEqual(model, true);
                
                next(null, null);
            }
        };
        
        controller.updatePassword(request, response);
    })
    .then(function (data, next) {
        var request = {
            body: {
                username: persons[0].username,
                password: 'new' + persons[0].username
            }
        };

        var response = {
            send: function (model) {
                test.ok(model);
                test.equal(model.id, persons[0].id);
                test.equal(model.name, persons[0].name);
                test.equal(model.username, persons[0].username);
                
                test.done();
            }
        };
        
        controller.loginPerson(request, response);
    })
    .run();
};
 

Próximos posts: pruebas del controlador MVC, pruebas levantando el servidor, pruebas usando un DSL (Domain Specific Language)

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez