[英]Test nodejs methode with Mocha and chai libraries
我想在下面用Mocha和chai測試這個方法,但是我遇到了一個錯誤:我想在下面用Mocha和chai測試這個方法,但是我得到了一個錯誤:
exports.getCaracteristiques = (req,res) => {
db.query('SELECT "titi", "toto"')
.then( ({rows}) => {
var caracteristiqueResult = rows.map((row) => {
return {
'idCaracteristique': row.CARACT_ID
, 'libelleCaracteristique': row.toto
, 'libelleCaracteristique': row.titi
};
})
res.json(caracteristiqueResult);
})
.catch(err => {
// handle the error
console.log("ERROR :", err)
res.status(500).end(err)
})
};
test.js文件包含:
var expect = require('chai').expect;
require("../config/config");
var ctr = require('../api/controllers/caracteristiques')
describe('Caracteristiques', () => {
it('returns an array of Carateristiques', () => {
// This will fail if "Caracteristiques result "is
// not array.
return ctr.getCaracteristiques.then(function(data){
expect(data).to.be.a('array');
});// no catch, it'll figure it out since the promise is rejected
});
})
但我得到這個錯誤:
Caracteristiques
1) returns an array of Carateristiques
0 passing (0ms)
1 failing
1) Caracteristiques
returns an array of Carateristiques:
TypeError: ctr.getCaracteristiques.then is not a function
at Context.it (test\caracteristiques.js:13:40)
如何解決這個問題?
錯誤:
TypeError: ctr.getCaracteristiques.then is not a function
完全正確。 調用getCaracteristiques()
方法時錯過了()
。
這應該工作:
return ctr.getCaracteristiques().then(function(data){
expect(data).to.be.a('array');
});
OP評論后編輯:
在您的代碼中, getCaracteristiques
需要一個req
和一個res
對象。 我的猜測是您使用express或任何其他節點js http庫,通常會為您填充。
在mocha中,我們是在沒有任何Web服務器的情況下自行調用該方法,因此我們需要自己制作這些對象。
getCaracteristiques
方法不使用req
,但需要res
才能具有json()
方法。 所以我們可以做:
const res = {
json: (a) => a,
};
return ctr.getCaracteristiques({}, res).then(function(data){
expect(data).to.be.a('array');
});
在我們的測試中,因此getCaracteristiques
返回我們想要的內容(只是數據,因為偽json
方法只會產生其參數)。
現在,測試將再次失敗,因為getCaracteristiques
不會返回json
調用。 如果我們添加一個return
語句,那么整個過程應該可以工作:
exports.getCaracteristiques = (req,res) => {
return db.query('SELECT "CARACT_ID", "CARACT_LIB", "COULEUR", "IMAGE_ACTIVE",
"IMAGE_PASSIVE", "ACTIF" FROM "DIM_PRC_CARACT"')
.then( ({rows}) => {
var caracteristiqueResult = rows.map((row) => {
return {
'idCaracteristique': row.CARACT_ID
, 'libelleCaracteristique': row.CARACT_CD
, 'libelleCaracteristique': row.CARACT_LIB
, 'couleurCaracteristique': row.COULEUR
, 'pictogrammeActifCaracteristique': row.IMAGE_PASSIVE
, 'pictogrammePassifCaracteristique': row.IMAGE_PASSIVE
};
})
return res.json(caracteristiqueResult);
})
請注意,已在db.query
和res.json
添加了return
res.json
,因此getCaracteristiques
方法現在返回了對caracteristiques的承諾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.