2011-10-17 36 views
5

Chúng tôi đã viết API web RESTful đáp ứng yêu cầu GET và PUT bằng cách sử dụng node.js. Chúng tôi đang gặp một số khó khăn khi thử nghiệm API. Thứ nhất, chúng tôi sử dụng Zombie.js, nhưng nó không phải là tài liệu tốt nên chúng tôi không thể làm cho nó thực hiện các yêu cầu PUT:Kiểm tra API web bằng cách sử dụng hoa nhài và 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") 
    }); 
    }); 
}); 

Sau đó chúng tôi cố gắng sử dụng một REST khách hàng gọi restler, mà sẽ OK, vì chúng ta don không cần bất kỳ mô phỏng trình duyệt nâng cao nào. Đây không do thực tế rằng yêu cầu có vẻ là không đồng bộ - tức là kiểm tra là vô ích vì nó kết thúc trước khi 'thành công' callback được gọi là:

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

Chúng ta nên biết ơn đối với bất kỳ lời khuyên về khuôn khổ kiểm tra thay thế hoặc khách hàng yêu cầu đồng bộ.

+1

nó sẽ không cung cấp cho bạn thử nghiệm RESTful, nhưng [thề] (http://vowsjs.org/) là một khung kiểm tra dựa trên node.js khá tốt. – hross

+0

Cảm ơn lời khuyên, tôi sẽ kiểm tra nó. – Jesper

Trả lời

3

Tôi tò mò về điều này nên tôi đã nghiên cứu thêm một chút. Khác với zombie, bạn có một vài tùy chọn ...

Bạn có thể sử dụng vows với thư viện http like this guy.

Tuy nhiên, tôi nghĩ cách tiếp cận tốt hơn có thể là sử dụng APIeasy, được xây dựng trên vows. Có một số awesome article over at nodejitsu that explains how to use it.

Một ý tưởng thú vị khác là sử dụng expresso nếu bạn đang sử dụng Express.

4

Đối với nút, nút hoa nhài từ Misko Hevery có hỗ trợ không đồng bộ và kết thúc tốt đẹp hoa nhài.

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

Bạn thêm một tham số 'làm' đến chữ ký kiểm tra, và gọi đó là khi cuộc gọi không đồng bộ hoàn tất. Bạn cũng có thể tùy chỉnh thời gian chờ (mặc định là 500ms).

ví dụ: từ 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 
}); 

nhài thường xuyên cũng đã hỗ trợ cho thử nghiệm không đồng bộ với chạy và waitsFor, hoặc có thể sử dụng 'done' với Jasmine.Async.

Các vấn đề liên quan