2011-10-17 15 views
5

Napisaliśmy interfejs API RESTful, który odpowiada na żądania GET i PUT za pomocą node.js. Mamy problemy z testowaniem interfejsu API. Najpierw użyliśmy Zombie.js, ale nie jest dobrze udokumentowane, więc nie mogliśmy dostać się do żądań PUT:Testowanie interfejsu API WWW za pomocą jaśminu i pliku 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") 
    }); 
    }); 
}); 

po to, że próbowali za pomocą REST klienta o nazwie restler, która będzie OK, ponieważ my nie potrzebuje zaawansowanej symulacji przeglądarki. To nie ze względu na fakt, że wniosek wydaje się być asynchroniczny - czyli test jest bezużyteczny, ponieważ kończy się przed zwrotna „na sukces” nazywa się:

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); 
    }); 
    }); 
}); 

Chcielibyśmy wdzięczny za wszelkie wskazówki na temat alternatywnych struktur testowych lub synchronicznych klientów żądań.

+1

to nie da ci RESTful testów, ale [śluby] (http://vowsjs.org/) to całkiem niezły szkielet testowy oparty na node.js. – hross

+0

Dzięki za podpowiedź, sprawdzę to. – Jesper

Odpowiedz

4

Dla węzła, węzeł jaśminowy od Misko Hevery ma asynchroniczne wsparcie i owija jaśmin.

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

dodać „Gotowe” parametr do podpisania testowego i nazwać po asynchroniczne wywołanie kończy. Możesz także dostosować limit czasu (domyślnie jest to 500ms).

np. z 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 
}); 

jaśmin regularny posiada również wsparcie dla asynchronicznego testów z tras i waitsFor lub można użyć „done” z Jasmine.Async.

Powiązane problemy