簡體   English   中英

使用Mocha和Chai庫測試Node.js方法

[英]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.queryres.json添加了return res.json ,因此getCaracteristiques方法現在返回了對caracteristiques的承諾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM