Как смоделировать напрямую импортированную функцию с помощью Jest?

Можно загрузить вторую версию jQuery, а затем восстановить исходную версию или сохранить вторую версию, если раньше не было загружено jQuery. Вот пример:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<script type="text/javascript">
    var jQueryTemp = jQuery.noConflict(true);
    var jQueryOriginal = jQuery || jQueryTemp;
    if (window.jQuery){
        console.log('Original jQuery: ', jQuery.fn.jquery);
        console.log('Second jQuery: ', jQueryTemp.fn.jquery);
    }
    window.jQuery = window.$ = jQueryTemp;
</script>
<script type="text/javascript">
    console.log('Script using second: ', jQuery.fn.jquery);
</script>
<script type="text/javascript">
    // Restore original jQuery:
    window.jQuery = window.$ = jQueryOriginal;
    console.log('Script using original or the only version: ', jQuery.fn.jquery);
</script>
0
задан skyboyer 18 January 2019 в 10:01
поделиться

1 ответ

Наконец выяснили ответ.

Ничего не нужно менять в исходном коде (импортированный модуль или тестируемый класс).

Импорт нужно было изменить с:

import {getJSON} from '../../../src/web/getJSON';

на:

import * as getJSON from '../../../src/web/getJSON';

И тогда я смог напрямую указать функцию для шпионажа:

const jsonSpy = jest.spyOn(getJSON, 'getJSON');

Исправлен тестовый случай

Вот как это все работает вместе.

LandingPageManager.test.ts

import 'jest';
// **** 1.) Changed the below line: ****
import * as getJSON from '../../../src/web/getJSON';
import {LandingPageManager} from '../../../src/web/LandingPageManager';

describe('fetchData', () => {
  let manager = new LandingPageManager();
  it('passes the correct URL to getJSON', () => {
    // **** 2.) Can now specify the method for direct mocking ****
    const jsonSpy = jest.spyOn(getJSON, 'getJSON');

    manager.fetchData('sampleValue');
    expect(getJsonSpy).toHaveBeenCalledWith('sampleValue');

    getJsonSpy.restoreAllMocks();
  });
});
0
ответ дан Cuga 18 January 2019 в 10:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: