相关疑难解决方法(0)

如何在每个测试的基础上更改模拟实现[Jestjs]

我想通过扩展默认mock的行为并在执行以下测试时将其恢复为原始实现来更改每个测试基础上模拟依赖项的实现.

更简单地说,这就是我想要实现的目标:

  1. 模拟依赖
  2. 在单个测试中更改/扩展模拟实现
  3. 下次测试执行时,恢复原始模拟

我正在使用Jest v21.

以下是典型的Jest测试:

__mocks__/myModule.js

const myMockedModule = jest.genMockFromModule('../myModule');

myMockedModule.a = jest.fn(() => true);
myMockedModule.b = jest.fn(() => true);

export default myMockedModule;
Run Code Online (Sandbox Code Playgroud)

__tests__/myTest.js

import myMockedModule from '../myModule';

// Mock myModule
jest.mock('../myModule');

beforeEach(() => {
  jest.clearAllMocks();
});

describe('MyTest', () => {
  it('should test with default mock', () => {
    myMockedModule.a(); // === true
    myMockedModule.b(); // === true
  });

  it('should override …
Run Code Online (Sandbox Code Playgroud)

javascript unit-testing mocking jestjs

36
推荐指数
4
解决办法
2万
查看次数

Jest - 模拟在React组件内部调用的函数

Jest提供了一种模拟函数的方法,如文档中所述

apiGetMethod = jest.fn().mockImplementation(
    new Promise((resolve, reject) => {
        const userID = parseInt(url.substr('/users/'.length), 10);
        process.nextTick(
            () => users[userID] ? resolve(users[userID]) : reject({
                error: 'User with ' + userID + ' not found.',
            });
        );
    });
);
Run Code Online (Sandbox Code Playgroud)

但是,当在测试中直接调用函数时,这些函数似乎只能工作.

describe('example test', () => {
    it('uses the mocked function', () => {
        apiGetMethod().then(...);
    });
});
Run Code Online (Sandbox Code Playgroud)

如果我有一个如此定义的React组件,我该如何模拟它?

import { apiGetMethod } from './api';

class Foo extends React.Component {
    state = {
        data: []
    }

    makeRequest = () => {
       apiGetMethod().then(result => {
           this.setState({data: result}); …
Run Code Online (Sandbox Code Playgroud)

unit-testing mocking reactjs jestjs

7
推荐指数
3
解决办法
1万
查看次数

标签 统计

jestjs ×2

mocking ×2

unit-testing ×2

javascript ×1

reactjs ×1