javascript - 开 Jest mock 类(class)强制不同的 react , typescript

标签 javascript typescript unit-testing jestjs

这又是我的一个非常简单的例子。 在简历中,我需要对模拟类有不同的响应。

这是我返回一个对象的简单类

            class Producer {
                hello() {
                    return {
                        message:'Class: Hello',
                    }
                }
            }
            export default Producer;

这是__mocks__文件夹中的模拟类

            class Producer {
                hello() {
                    return {
                        message:'__mocks__: hello',
                    }
                }
            }
            export default Producer;

这是我的测试文件,它按我的预期工作

            import Consumer from './Consumer';
            jest.mock('./Producer');
            test('simple test 1', () => {
                let consumer = new Consumer();
                consumer.call();
                expect(consumer.response.message).toEqual('__mocks__: hello')
                console.log(consumer.response)
                // prints on console { message: '__mocks__: hello' }
            });

我的问题是,对于其他测试,我需要来自模拟文件 Producer

的不同响应
            jest.mock('./Producer').updateOnTheFly( hello() { 
                    return {
                        message:'UPDATE ON FLY: hello',
                    }
            })
            test('simple test 1', () => {

                let consumer = new Consumer();
                consumer.call();
                expect(consumer.response.message).toEqual('UPDATE ON FLY: hello')
            });

最佳答案

对于这样的事情,__mocks__/Producer.js 创建手动模拟会更容易。

相反,使用 jest.mock('./Producer'); 自动模拟模块...

...然后根据需要模拟 Producer.prototype.hello 的返回值:

import Consumer from './Consumer';

import Producer from './Producer';
jest.mock('./Producer');  // <= auto-mock Producer

test('simple test 1', () => {
  Producer.prototype.hello.mockReturnValue({ message: 'mocked: hello' });
  let consumer = new Consumer();
  consumer.call();
  expect(consumer.response.message).toEqual('mocked: hello')  // Success!
});

test('simple test 2', () => {
  Producer.prototype.hello.mockReturnValue({ message: 'UPDATED: hello' });
  let consumer = new Consumer();
  consumer.call();
  expect(consumer.response.message).toEqual('UPDATED: hello')  // Success!
});

关于javascript - 开 Jest mock 类(class)强制不同的 react , typescript ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56277436/

相关文章:

javascript - 转义正则表达式 (JS) 中的一些特殊字符

javascript - 根据单选按钮选择更改值和链接

typescript - 从包中修改命名空间

javascript - Vue 使用来自 Vue() 的模板和脚本定义组件

c# - 使用 Moq 和 Mock 对象 - 我的列表计数始终为 0,而它不应该是 0

javascript - 根据D3图中的节点位置调整链路起点和终点

javascript pow 参数 - Armstrong Numbers

angular - 避免 RxJs 6 中的嵌套 subscribe() 调用

java - 在 JUnit 测试期间禁用部分 Java 程序

c# - 让单元测试返回 async void 不好吗?