При тестировании класса через шутку, обрабатывает ли он импорт?

Минимальный воспроизводимый пример

SomeClass.js

import Rx from "rxjs/Rx.js";

class SomeClass {
    constructor() {
        this.subject = new Rx.Subject();
    }
}

SomeClass.test.js

import SomeClass from "./SomeClass.js";

let someClass = new SomeClass();

После запуска npm test я получаю сообщение об ошибке TypeError: Cannot read property 'Subject' of undefined. Rxjs был установлен в моем проекте.

Есть идеи?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
121
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вариант 1. Используйте Manual Mocks, мокайте модуль rxjs/Rx.js явно.

Например.

SomeClass.js:

import Rx from 'rxjs/Rx.js';

export default class SomeClass {
  constructor() {
    this.subject = new Rx.Subject();
  }
}

SomeClass.test.js:

import SomeClass from './SomeClass';
import Rx from 'rxjs/Rx.js';

jest.mock('rxjs/Rx.js', () => {
  return { Subject: jest.fn() };
});

describe('65261235', () => {
  it('should pass', () => {
    let someClass = new SomeClass();
    expect(Rx.Subject).toBeCalledTimes(1);
  });
});

результат модульного теста:

 PASS  examples/65261235/SomeClass.test.js
  65261235
    ✓ should pass (2 ms)

--------------|---------|----------|---------|---------|-------------------
File          | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
--------------|---------|----------|---------|---------|-------------------
All files     |     100 |      100 |     100 |     100 |                   
 SomeClass.js |     100 |      100 |     100 |     100 |                   
--------------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        5.877 s

Вариант 2. включить automock для jestjs.

Эта опция сообщает Jest, что все импортированные модули в ваших тестах должны автоматически имитироваться. Все модули, используемые в ваших тестах, будут иметь замену реализации, сохраняя поверхность API.

Спасибо за быстрый ответ ... так что, действительно ли нет способа использовать настоящую тему rxjs? Потому что, когда я пытаюсь сделать return { Subject: Rx.Subject() }; в лямбда-функции внутри функции jest.mock(), выдается ошибка, говорящая: «Фабрика модулей jest.mock()» не может ссылаться на какие-либо переменные вне области видимости. ."

Jacob 12.12.2020 05:28

Другие вопросы по теме