NodeJs单元测试异步http请求不起作用响应null

时间:2019-04-07 00:16:54

标签: node.js unit-testing

我有一个特定的http请求调用,我正在尝试对其进行一些单元测试,但该测试失败了,因为似乎响应在返回实际的http响应对象之前就已经得到了评估。我尝试了许多图书馆,无论我能想到什么,但没有运气!这是针对学校项目的,因此这是一个非常简单的http请求,只需要完成一些单元测试即可。我最有可能自己进行单元测试,我只需要了解为什么响应总是一直“不确定”?

这是我的app.post()方法。

app.post("/getDates", (req,res,next)=>{
puzzleDates.puzzleRequest(req.body.puzzleDates)
.then((results)=>{
    res.status(200).json(results); 
})
.catch(err=>{
    res.status(500).send({message: err});
})   
})

它正在puzzleRequest文件中调用这些函数。

let puzzleRequest = async function(eventPuzzle) {
let PuzzleArr = []
let responseObj = new Object()

try {
    eventPuzzle.sort((a,b)=>a.puzzleDate - b.puzzleDate);
    for(let i=0; i < eventPuzzle.length; i++) {
        let url = config.get('Url') + eventPuzzle[i].puzzleDate + '/puzzle.json';

        let results = await fetchResults(url);

        let puzzleObj = PuzzleModel.formatPuzzle(results);
        PuzzleArr.push(puzzleObj);


    }         
    responseObj.Puzzle = PuzzleArr;

    return responseObj;
} catch (e) {
    return e;
}



}


function fetchResults(url){
return new Promise((resolve,reject)=>{
    request({
        url: url,
        method: 'GET'
    }, (error,response,body)=>{
        if(error) reject(error)
        else{
            let puzzle = JSON.parse(body);
            resolve(puzzle);
        }

    })
})
}


 module.exports.puzzleRequest = puzzleRequest;

由于响应似乎始终是不确定的,因此我无法对其进行任何单元测试。

对不起,我评论的东西,那只是我试图做的不同的事情。

const config = require('config');
const expect = require('chai').expect;
const request = require('supertest');
const requestGame = require('../request/requestGame')

describe('response template objects', ()=> {
it('should include properties from response template',async ()=>{
    /*request(server)
    .post('/getDates')
    .expect(200)
    .expect('Content-Type', /json/)*/
    //var res = puzzleDates.puzzleRequest(puzzlesToGenerate)  
    //console.log(res);     
    //expect(res.games).to.be.an('array')
    /*.end((err,res)=>{
         if(err) return done(err)   
         res.body.should.have.property('games');
         done()
    })*/
    const res = await puzzleDates.puzzleRequest(puzzlesToGenerate)  
    console.log(res);
    expect(res).to.be.a('object');
})

})

作为学校的一项练习,您可以想象我在所有这些方面都是初学者,因此,如果您能帮助我理解这一点,将不胜感激。

再次感谢。

0 个答案:

没有答案