2011-10-17 23 views
5

Hemos escrito una API web RESTful que responde a las solicitudes GET y PUT utilizando node.js. Estamos teniendo algunas dificultades para probar la API. En primer lugar, hemos utilizado Zombie.js, pero no está bien documentado, de manera que no podíamos conseguir que se haga peticiones PUT:Prueba API web usando jasmine y node.js

var zombie = require("zombie"); 

describe("description", function() { 
    it("description", function() { 
    zombie.visit("http://localhost:3000/", function (err, browser, status) { 
     expect(browser.text).toEqual("A") 
    }); 
    }); 
}); 

Después de que hemos intentado usar un cliente REST llamada restler, que haría bien, ya que Don no necesita ninguna simulación de navegador avanzada. Esta falla debido al hecho de que la solicitud parece ser asíncrono - es decir, la prueba es inútil ya que termina antes de la 'en el éxito' de devolución de llamada se llama:

var rest = require('restler'); 
describe("description", function() { 
    it("description", function() { 
    rest.get("http://www.google.com").on('complete', function(data, response) { 
     // Should fail 
     expect(data).toMatch(/apa/i); 
    }); 
    }); 
}); 

que habíamos agradecido por algún consejo sobre los marcos de prueba alternativos o clientes de solicitud síncrona.

+1

no le dará pruebas RESTful, pero [votos] (http://vowsjs.org/) es un marco de prueba basado en node.js bastante bueno. – hross

+0

Gracias por el consejo, lo comprobaré. – Jesper

Respuesta

4

Para nodo, jasmine-node de Misko Hevery tiene soporte asincrónico y wraps jazmín.

https://github.com/mhevery/jasmine-node

se añade un parámetro 'hecho' a la firma de prueba, y la llamada que cuando finaliza la llamada asincrónica. También puede personalizar el tiempo de espera (el valor predeterminado es 500 ms).

p. Ej. Del README Github

it("should respond with hello world", function(done) { 
    request("http://localhost:3000/hello", function(error, response, body){ 
    done(); 
    }, 250); // timeout after 250 ms 
}); 

jazmín regular también tiene soporte para las pruebas asíncrona con carreras y waitsFor, o puede utilizar 'Hecho' con Jasmine.Async.