2015-09-07 78 views
1

我實際上正在創建一個應用程序,我需要進行一些集成測試。使用Nodejs進行集成測試,express和supertest

我真的好奇我應該怎麼做才能避免我的特快回撥路線的真實行爲。

例如:承認我想在快速路由上發佈數據並檢查是否收到HTTP 200響應代碼,但沒有真正將該對象添加到我的數據庫中。

編輯:我米使用supertest(https://github.com/visionmedia/supertest

我該怎麼辦?

request 
    .post('/users') 
     .send({ 
      message : JSON.stringify({ 
       date: Math.round((new Date()).getTime()/1000), 
        type_fiche: 'test', 
        id_fiche: 123 
       }) 
      }) 
      .expect(200) 
      .end(done); 
     }); 

編輯2:是否有可能做出類似模擬的東西?像僞造一個請求?

你知道嗎,如果我發佈的東西,這是我需要在我的數據庫中插入一些權利?

我不想在我的集成測試期間插入任何東西,只測試結果http響應代碼。

我的意思是,承認我有一個像/client的網址,並且我發佈了一個新的客戶端。它將在表格中創建一個新行。我不想要插入任何行,但我需要測試請求的響應代碼。

這可能嗎?

+0

我無法理解你的需求。 –

回答

1

我會建議將sinon.js添加到您選擇的混音或任何其他嘲諷庫中。它可能需要相當多的重構才能注入模擬組件。

主要思想是模擬用戶存儲庫,它封裝所有與用戶數據的數據庫通信並在測試中模擬它。然後你會將嘲諷的資源庫注入路由器並用supertest測試快車應用程序。查看GET請求的虛擬用戶API測試示例。

var routerFactory = require('../path/to/router/factory'); 
describe('app router', function() { 
var app, repository, router; 

    beforeEach(function() { 
    app = require('express')(); 
    repository = createFakeUserRepository(); 
    router = createRotuter(repository);  
    }); 

describe('getting user by id', function() { 
    beforeEach(function() { 
    app.use('/test'm router); 
    testedApp = supertest(app); 
    }); 

    describe('GET /user/id', function(){ 
    beforeEach('setup for valid response', function() { 
     repository.getById.returns(Promise.resolve({ expected: 'valid response' })) 
}) 
    it('returns 200', function (done){ 
     testedApp.get('/test/user/id') 
     .expect(200, JSON.stringify({expected: 'valid response'}), done); 
    }) 
    }) 
    }) 
}) 
}) 


function createFakeUserRepository() { 
    return { 
    getById(): sinon:stub() 
    save(): sinon:stub() 
    }; 
} 

function createRouter(fakeUserRepository) { 
    return routerFactory(fakeUserRepository); 
} 
1

您可以使用nock模塊。它使用簡單,你可以得到任何你想要的數據,你可以測試它。

Ex: nock('http://example.com') 
    .get('/users') 
    .query(true) 
    .reply({results: [{id: 'pgte'}]}); 

在supertest裏面你可以測試'id'值。對於錯誤情況,您可以使用replyWithError。你可以在這裏得到更多的細節:https://www.npmjs.com/package/nock

相關問題