supertest 做api 的route測試
通常會在before內建立連線
再交由後續it進行測試
建立連線的過程
通常可能會是
const server = app.listen(5000,...)
api = supertest(server)
產生api 物件做後續的測試
如果產生server時間過長 (預設限制是2000ms)
則會因timeout而讓測試無法進行
在執行 mocha時 可以透過設定 加長timeout的時間
mocha --timeout 5000
2019年12月24日 星期二
2019年7月29日 星期一
nodejs 使用mocha+supertest做api測試
因為是使用mocha做單元測試
是可以把測試api 與測試function的部分
一起執行
幾個地方注意
1.當需要在執行API測試前後做一些資料處理
例如塞入token 這部分都會是放在
beforeEach與afterEach內執行
2.預期會是在執行beforeEach後才會去執行it測試
但當beforeEach需要執行非同步的功能
需帶入done callback 當作在執行完成時
往下執行的通知點
3.beforeEach內要執行async method
若直接用async/await執行會有問題時
改用promise方式執行 可以解決
4.API測試 若回傳為json物件
可以透過res.body拿到 object型態的資料
若透過res.text 拿到的資料類型會是text 需要自己轉成物件
5.API測試 若回傳為text
透過res.text 拿到取得的資料,若去拿res.body會是個空物件{}
使用參考
https://github.com/visionmedia/supertest
sample Code
是可以把測試api 與測試function的部分
一起執行
幾個地方注意
1.當需要在執行API測試前後做一些資料處理
例如塞入token 這部分都會是放在
beforeEach與afterEach內執行
2.預期會是在執行beforeEach後才會去執行it測試
但當beforeEach需要執行非同步的功能
需帶入done callback 當作在執行完成時
往下執行的通知點
3.beforeEach內要執行async method
若直接用async/await執行會有問題時
改用promise方式執行 可以解決
4.API測試 若回傳為json物件
可以透過res.body拿到 object型態的資料
若透過res.text 拿到的資料類型會是text 需要自己轉成物件
5.API測試 若回傳為text
透過res.text 拿到取得的資料,若去拿res.body會是個空物件{}
使用參考
https://github.com/visionmedia/supertest
sample Code
describe('測試 sample 目錄', () => {
beforeEach((done) => {
// 測試前需要執行的工作
runServer().then(response => {
server = response.server
api = supertest(server)
done()
})
})
afterEach((done) => {
// 測試結束前需要執行的工作
server.close()
done()
})
it('sample/text 測試', (done) => {
api.get('/sample/text')
.expect('Content-Type', /text/)
.expect(200)
.end((err, response) => {
if (err) return done(err)
console.log('response text====')
console.log(typeof response.text)
console.log(response.body)
done()
})
})
it('sample/json 測試', (done) => {
api.get('/sample/json')
.expect('Content-Type', /json/)
.expect(200)
.end((err, response) => {
if (err) return done(err)
console.log('response json====')
console.log(response.body)
done()
})
})
})
訂閱:
文章 (Atom)