Шутка насмехается над классом, заставляет другой ответ, машинопись - PullRequest
0 голосов
/ 23 мая 2019

это я снова с очень простым примером.В резюме мне нужен другой ответ для проверяемого класса.

Это мой простой класс, который возвращает объект

            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')
            });

Ответы [ 2 ]

1 голос
/ 26 мая 2019

Для чего-то подобного может быть проще , а не создать ручной макет для __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!
});
0 голосов
/ 03 июня 2019

Ну, после некоторого повторного поиска я решил с этим.

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

Дразнить Producer, не нужно создавать Мок файл

        import Consumer from './Consumer';
        jest.mock('./Producer');

        test('simple test 1', () => {
            // mocking Producer.hello()
            Producer.mockImplementation(() => {
                return {
                    hello: () => {
                        return {
                            message: "ths is mocked "
                        }
                    },
                };
            });  

            let consumer = new Consumer();
            consumer.call(); /// Consume.call() uses inside Producer.hello() mocked
        })            
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...