@sanex3339

Как в тестах Jasmine внутри тестируемого метода подменить значение переменной на другое?

Проблема - тестирую метод, в котором значение одной переменной равно свойству статического класса (es6),
при том, что сами Settings.urlParams создаются после вызова статического метода init() класса Settings, метод init() вызывается вообще в совершенно другом месте.
.....
let urlparams = Settings.urlParams;
.....


Сейчас при тесте если импортировать в spec с тестом помимо тестируемого класса еще и класс Settings, в beforeEach вызвать Settings.init(), то во время теста метода - тест проходит.

Как мне сделать фейковый класс Settings, что бы в тестируемом методе значение переменной обращалось бралось из свойства фекового класса?

Пробовал создать внутри файла с тестом класс Settings, с этим свойством, устанавливаемым в методе init(). В beforeEach теста вызываю Settings.init(), но в тесте значение переменной не видит мой фейковый класс, хотя если сделать console.log в beforeEach, то данные отобразятся фейкового класса, что логично.
  • Вопрос задан
  • 349 просмотров
Пригласить эксперта
Ответы на вопрос 1
k12th
@k12th
console.log(`You're pulling my leg, right?`);
метод init() вызывается вообще в совершенно другом месте

Тестами можно покрыть только то, что имеет явное и воспроизводимое состояние.

Как мне сделать фейковый класс Settings, что бы в тестируемом методе значение переменной обращалось бралось из свойства фекового класса?

Никак. В момент объявления функции, которая использует Settings, происходит замыкание, и в функции сохраняется ссылка именно на то значение внешней переменной Settings, которое было на момент объявления. Это можно обойти, но я вам не скажу, как, а то вы такого наворотите, что мама дорогая:)

Но вообще какая-то странная у вас архитектура. Класс, у которого есть статический метод init — это очень странно пахнет. Синглтон, что ли? Если да, то бросьте бяку.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы