首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >进行异步调用的Mocha测试同步函数

进行异步调用的Mocha测试同步函数
EN

Stack Overflow用户
提问于 2018-07-07 02:26:11
回答 1查看 112关注 0票数 0

我正在尝试找出如何测试进行异步调用的同步方法。

我在下面有这个方法,我想简单地测试并断言res.status(HttpStatus.OK).send()返回200响应

代码语言:javascript
复制
'use strict'

const HttpStatus = require('http-status-codes')
let db = null

/**
 * Gets a resource by id
 * @param  {Object} req The request object
 * @param  {Object} res The response object
 * @return {Object}     An http response
 */
function getById (req, res) {
  const dockey = req.params.resourceType + '$' + req.params.id

  // The get by id query
  const query = ResourceTypesDao.getByIdQuery()

  db.transaction({
    write: ['auditevents', 'auditedges'],
    read: ['clindocs']
  },
  query,
  {
    key: dockey,
    id: req.params.id
  })
    .then(result => {
        return res.status(HttpStatus.OK).send()
    .catch(err => {
      console.log('err = ', err)
    })
}

module.exports = (database) => {
  db = database
  return getById
}

对应的spec文件

代码语言:javascript
复制
'use strict'

const expect = require('chai').expect

let db = {
  transaction: function(collections, query, params) {
    return new Promise((resolve, reject) => {
      return resolve({doc: {}})
    })
  }
}

const getById = require('../../../src/controllers/resource-types/getById')(db)

let req = {
  params: {
    id: 'foo'
  }
}

let res = {
  status: function() {

    let self = {}

    function send() {

    }

    self.send = send
    return self
  },
  send: function() {

  }
}

describe.only('#getById', () => {

  it('should pass', (done) => {

const result = getById(req, res)
    setTimeout(() => {

      console.log('result = ', result) <-- returning undefined so this aint right
      expect(result).to.be.instanceOf(Object)
      done()
    }, 1000)
  })
})
EN

回答 1

Stack Overflow用户

发布于 2018-07-08 01:38:12

您需要从getById函数返回promise:

代码语言:javascript
复制
function getById (req, res) {
  ...
  return db.transaction({...}).then(...).catch(...);
}

然后,在您的测试中,等待它解决,然后再进行断言:

代码语言:javascript
复制
it('should pass', (done) => {
  getById(req, res)
    .then(result => {
      // make assertion here
      done()
    });
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51215935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档