2016-03-01 79 views
0

它必須有選項來設置POST請求的req.params。用於單元測試POST請求的npm包是什麼?

supertest軟件包不提供此功能,或者沒有很好的文檔記錄清楚它確實如此。

+0

supertest只是在後臺使用superagent所以它應該工作正常,你嘗試使用它或只是掃描文檔?如果您確實嘗試過使用它,請發佈您的代碼 – SlashmanX

回答

0

如果您正在測試快速應用程序,supertest支持POST以及大多數其他HTTP方法。快遞req.params由URL的路徑部分填充,所以你會做這樣的事情

var app = require('./my-app') 
var request = require('supertest')(app) 

request.post('/some/path/req/params/is/here?some=query') 
    .send({some: 'body'}) 
    .expect(200) 
    .end(function (error, res) { 
    assert(res.body.something === 'value') 
    }) 
+0

這不是真的,'req.query'由url參數填充。我需要一種方法來填充'req.params'。 – MobileDream

+0

'req.query'來自查詢字符串('?'後面的部分)。 'req.params'來自URL路徑部分本身(在'?'之前),並且基於在app.post('/ api/users /:id')'等快速路徑路徑中使用佔位符,在這種情況下URL'/ api/users/42'會導致''req.params.id'爲''42「'。 –

+0

如果您想避免浪費每個人的時間,請按照stackoverflow指南的建議發佈代碼段,我們可以專門爲您提供幫助。 –

0

是的,你能以超快的測試,因爲它具有相同的操作superagent,這是一個例子:

request 
    .post('/api/pet') 
    .send({ name: 'Manny', species: 'cat' }) 
    .set('X-API-Key', 'foobar') 
    .set('Accept', 'application/json') 
    .end(function(err, res){ 
    // Calling the end function will send the request 
    }); 

https://github.com/visionmedia/supertest

默認情況下發送字符串將內容類型設置爲 應用程序/ x-WWW窗體-urlencoded,多次調用無線會被連接在一起 與&,這裏產生的名稱= TJ &寵物=託比:

request.post('/user') 
    .send('name=tj') 
    .send('pet=tobi') 
    .end(callback); 
+0

req.param爲空。這沒有幫助。什麼是'set('X-API-Key','foobar')'用於?我需要使用application/x-www-form-urlencoded發送參數。 – MobileDream

+0

@MatkoKlaic我看到了你的另一個問題,我需要知道你如何定義你的路由處理程序,因爲'req.params'從端點定義自動填充 – Osukaa

+0

@MatkoKlaic我認爲你正在閱讀字面,它是隻是你能做的一個例子。 :)如果你閱讀superagent文檔,你可以看到如何發送'application/x-www-form-urlencoded'。 – Osukaa

0

supertest docs說:

任何你可以用的SuperAgent做,你可以用supertest

因此,以下應該工作正常:

request(app) 
.post('/') 
.query({format: 'json'}) 
.expect(....) 
相關問題