Модульное тестирование RxJS: какова функциональность обратного вызова, переданного в TestScheduler - PullRequest
0 голосов
/ 09 октября 2019

Я пытаюсь использовать TestScheduler для написания модульного теста для моих функций RxJs. Есть много постов, связанных с этим, и я слежу за этим постом: https://medium.com/@kevinkreuzer/marble-testing-with-rxjs-testing-utils-3ae36ac3346a

В следующей части есть один запутанный момент:

strong text

Я не понимаю, почему нам нужно передать функцию обратного вызова в конструктор TestScheduler. В посте упоминалось, что это assertDeppEqual function which tells the TestScheduler how to compare values. The methods used to compare values depends on your testing framework.

Но это объяснение мне не понятно. Я не понимаю, какова связь между этой функцией и реальной тестовой логикой, которую мы пишем, например, в следующем случае:

enter image description here

в приведенном вышеслучае, это утверждают, что expectObservable().toBe(). какие отношения между ними?

1 Ответ

1 голос
/ 24 октября 2019

Давайте попробуем посмотреть, что делают методы expectObservable(observable, subscriptionMarbles) и run(callback).

expectObservable() подписывается на пройденный observable. Методы обратного вызова, передаваемые в subscribe() метод, заполняют массив actual (это то, что вы получаете в обратном вызове, передаваемом в TestScheduler конструктор).

actual массив получает Массив this.flushTests (обернутый в flushTest объект). flushTests - это массив тестов, которые должны быть выполнены (помните, что вы можете вызывать методы expectObservable() или expectSubscriptions() несколько раз). Если вы используете метод run() (и делаете это на основе изображения), после выполнения обратного вызова run() вызывается метод this.flush(). Этот метод запускает ваши тесты с помощью , вызывая this.assertDeepEqual() обратный вызов, который вы предоставили конструктору TestScheduler.

Значения actual и expected из test передается. expected заполняется тем же методом, где заполняется actual, сразу после него .

Таким образом, вызов expectObservable() только подготавливает и преобразует наблюдаемые значенияс чем-то сопоставимым (массив значений actual и expected). Как сказано в официальной документации, вы несете ответственность за сравнение на основе используемой вами инфраструктуры тестирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...