首页 > 解决方案 > 如何使用 Jest 测试处理来自外部变量的数据的函数

问题描述

我想测试一个从用户列表中按 ID 返回用户的函数!有一个文件负责处理用户列表:

const users = [];
const getUser = (id) => users.find((user) => user.id == id);
module.exports = { users, addUser, removeUser, getUser, getUsers };

不幸的是,我没有找到有关如何测试此功能的解决方案。预期结果未定义,因为 users 数组为空。我不明白如何替换一组用户进行测试。

const { getUser } = require('../users');

describe('Socket', () => {

  let socketId;

  beforeEach(() => {
    socketId = 'qwertyqwerty';
  })

  test('getUser', () => {
    const user = getUser(socketId);

    expect(user).toEqual({id: 'qwertyqwerty',user:{username: 'Max'}});
  });

})

标签: javascriptnode.jsjestjsnodes

解决方案


做出决定!!!简而言之。使用了 babel-plugin-rewire。以下是如何实现: users.js

import Helper from './Helper';

const users = [];

const user = {
  getUser: (id) => users.find((user) => user.id == id),
}

module.exports = user;

和测试文件:

const User = require('../users');

User.__Rewire__('users', [{id:'qwertyqwerty',user:{username: 'Max'}},{id:'asdfghasdfgh',user:{username: 'Andy'}}]);

describe('Socket', () => {

  let socketId;

  beforeEach(() => {
    socketId = 'qwertyqwerty';
  })

  test('getUser is user error', () => {
    const user = User.getUser(socketId);
    expect(user).toEqual({id: 'qwertyqwerty',user:{username: 'Max'}});
  });

})

感谢 Always Learning,提供快速正确的答案)))


推荐阅读