I could really do with some advice on testing a RESTful api I created in node.js. There are a plethora of frameworks out there and I am at a loss. My testing knowledge isn't good enough generally which is why I am trying to write these tests. I've tried vows.js which seems nice but I couldn't work out how to incorporate the testing of my API, I need some sort of client. An example of a simple post to test a login system is all I need to get going.
vows-is sucks. use mocha
Updated with vow-is code
Here's the vows-is example from the vows-is examples folder.
// simple HTTP
// Run with node example/simple-http.js
var express = require("express");
is = require("../src/vows-is.js");
is.config({
"server": {
"factory": function _factory(cb) {
var app = express.createServer();
app.get("/", function(req, res) {
res.send("hello world");
})
app.listen(3000);
cb(app);
},
"uri": "http://localhost:3000",
"kill": function _kill(app) {
app.close();
}
}
});
is.suite("http request test").batch()
.context("a request to GET /")
.topic.is.a.request("GET /")
.vow.it.should.have.status(200)
.vow.it.should.have
.header("content-type", "text/html; charset=utf-8")
.context("contains a body that")
.topic.is.property('body')
.vow.it.should.be.ok
.vow.it.should.include.string("hello world")
.suite().run({
reporter: is.reporter
}, function() {
console.log("finished");
is.end();
})
This uses vows-is.
http://blog.nodejitsu.com/rest-easy-test-any-api-in-nodejs is designed for this very purpose. It's a DSL that sits on top of Vows that streamlines the process of writing out tests using vows.
Basic test:
//
// Here we will configure our tests to use
// http://localhost:8080 as the remote address
// and to always send 'Content-Type': 'application/json'
//
suite.use('localhost', 8000)
.setHeader('Content-Type', 'application/json');
//
// A GET Request to /ping
// should respond with 200
// should respond with { pong: true }
//
.get('/ping')
.expect(200, { pong: true })
//
// A POST Request to /ping
// should respond with 200
// should respond with { dynamic_data: true }
//
.post('/ping', { dynamic_data: true })
.expect(200, { dynamic_data: true })
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With