2011-10-17 82 views
5

我們編寫了一個RESTful Web API,它使用node.js響應GET和PUT請求。 我們在測試API時遇到了一些困難。 首先,我們使用Zombie.js,但它不是有據可查的,所以我們不能把它做PUT請求:使用jasmine和node.js測試web API

var zombie = require("zombie"); 

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

之後,我們用一個REST客戶端調用restler,試過這將OK,因爲我們不不需要任何先進的瀏覽器模擬。這由於失敗的請求似乎是異步的事實 - 即測試是無用的,因爲它完成了「成功」回調被調用之前:

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

我們最好約替代測試框架的任何提示感謝或同步請求客戶端。

+1

它不會給你RESTful測試,但[vows](http://vowsjs.org/)是一個相當不錯的基於node.js的測試框架。 – hross

+0

感謝您的提示,我會檢查出來。 – Jesper

回答

4

對於節點,來自Misko Hevery的jasmine-node具有異步支持幷包裝茉莉花。

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

你一個「完成」參數添加到測試簽名,並調用當異步調用完成這一點。您也可以自定義超時時間(默認值爲500毫秒)。

例如從GitHub的README

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

茉莉經常也有與運行和waitsFor異步測試支持,或者可以使用「完成」與Jasmine.Async。