te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>javascript - JestJS - Trying to Mock Async Await in Node JS Tests - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - JestJS - Trying to Mock Async Await in Node JS Tests - Stack Overflow

programmeradmin3浏览0评论

I am attempting to use Jest for my Node Js Test (specifically AWS's Lambda) but I am having difficulty mocking async await functionality.

I am using babel-jest and jest-cli. Below are my modules. I am getting to the first console.log, but the second console.log returns undefined and my test crash.

Any ideas on how to implement this?

Below is my module:

import {callAnotherFunction} from '../../../utils';

  export const handler = async (event, context, callback) => {

  const {emailAddress, emailType} = event.body;
  console.log("**** GETTING HERE = 1")
  const sub = await callAnotherFunction(emailAddress, emailType);
  console.log("**** Not GETTING HERE = 2", sub) // **returns undefined**

  // do something else here
  callback(null, {success: true, returnValue: sub})

}

My Test

import testData from '../data.js';
import { handler } from '../src/index.js';
jest.mock('../../../utils');

beforeAll(() => {
  const callAnotherLambdaFunction= jest.fn().mockReturnValue(Promise.resolve({success: true}));
});

describe('>>> SEND EMAIL LAMBDA', () => {
  test('returns a good value', done => {
    function callback(dataTest123) {
      expect(dataTest123).toBe({success: true, returnValue: sub);
      done();
    }

    handler(testData, null, callback);
  },10000);
})

I am attempting to use Jest for my Node Js Test (specifically AWS's Lambda) but I am having difficulty mocking async await functionality.

I am using babel-jest and jest-cli. Below are my modules. I am getting to the first console.log, but the second console.log returns undefined and my test crash.

Any ideas on how to implement this?

Below is my module:

import {callAnotherFunction} from '../../../utils';

  export const handler = async (event, context, callback) => {

  const {emailAddress, emailType} = event.body;
  console.log("**** GETTING HERE = 1")
  const sub = await callAnotherFunction(emailAddress, emailType);
  console.log("**** Not GETTING HERE = 2", sub) // **returns undefined**

  // do something else here
  callback(null, {success: true, returnValue: sub})

}

My Test

import testData from '../data.js';
import { handler } from '../src/index.js';
jest.mock('../../../utils');

beforeAll(() => {
  const callAnotherLambdaFunction= jest.fn().mockReturnValue(Promise.resolve({success: true}));
});

describe('>>> SEND EMAIL LAMBDA', () => {
  test('returns a good value', done => {
    function callback(dataTest123) {
      expect(dataTest123).toBe({success: true, returnValue: sub);
      done();
    }

    handler(testData, null, callback);
  },10000);
})
Share Improve this question edited Sep 19, 2019 at 15:20 cse 4,1042 gold badges22 silver badges38 bronze badges asked Jul 18, 2017 at 13:52 andreandre 1,6804 gold badges19 silver badges31 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 6

You should be careful about somethings below:

  • Import your utils as a module then mock callAnotherLambdaFunction function

  • Mock return value of callAnotherLambdaFunction with Resolve and Reject case https://jestjs.io/docs/en/mock-function-api.html#mockfnmockresolvedvaluevalue

This is my example:

import testData from '../data.js';
import { handler } from '../src/index.js';
import * as Utils from '../../../utils'


jest.mock('../../../utils');
beforeAll(() => {
  Utils.callAnotherLambdaFunction = jest.fn().mockResolvedValue('test');
});

describe('>>> SEND EMAIL LAMBDA', () => {
  it('should return a good value', async () => {
    const callback = jest.fn()
    await handler(testData, null, callback);
    expect(callback).toBeCalledWith(null, {success: true, returnValue: 'test'})
  });
})

jest.mock('../../../utils'); is fine, But you are not actually mocking the implementation, you have to implement the behaviour yourself.

So you need to add

import { callAnotherFunction } from '../../../utils';

callAnotherFunction.mockImplementation(() => Promise.resolve('someValue'));

test('test' , done => {
  const testData = {
    body: {
      emailAddress: 'email',
      emailType: 'type'
    }
  };

  function callback(dataTest123) {
    expect(dataTest123).toBe({success: true, returnValue: 'someValue');
    done();
  }

  handler(testData, null, callback);
});

Hope this helps.

发布评论

评论列表(0)

  1. 暂无评论