Как проверить, что сервис AngularJS применяет класс CSS, используя angular .element ("элемент"). AddClass, используя Jasmine? - PullRequest
0 голосов
/ 27 января 2020

Мы работаем над темной темой для нашего приложения, мы устанавливаем это путем изменения класса CSS для элемента body. Он включается и выключается через службу AngularJS с вызовом, подобным ...

function setTheme(theme){
    angular.element("body").addClass(theme);
}

Я пытаюсь написать модульные тесты с использованием Jasmine в службе, чтобы обеспечить вызов angular.element("body") с добавлением темы CSS класс, такой как ....

this.mockAngularElement = {
    addClass: jasmine.createSpy("addClass"),
    removeClass: jasmine.createSpy("removeClass")
};
jasmine.createSpy(angular, "element").and.returnValue(this.mockAngularElement);

И где соответствующие модульные тесты имеют эти две ожидаемые строки ...

expect(angular.element).toHaveBeenCalledWith("body");
        expect(this.mockAngularElement.addClass).toHaveBeenCalledWith("mock-theme");

Однако жасмин кажется пожаловаться на что-то вроде ...

Error: <toHaveBeenCalledWith> : Expected a spy, but got Function.
        Usage: expect(<spyObj>).toHaveBeenCalledWith(...arguments) in node_modules/jasmine-core/lib/jasmine-core/jasmine.js (line 3690)
        <REDACTED>.spec.js:153:53

Есть идеи по этому поводу? Что может быть лучше для фактического тестирования элемента body, когда этот класс CSS применяется из этого сервиса?

Ответы [ 2 ]

0 голосов
/ 28 января 2020

Используйте синтаксис toHaveClass для Jasmine.

expect(angular.element("body")).toHaveClass("css-class");
0 голосов
/ 27 января 2020

Частичный ответ, мы можем проверить Angular элемент вызывается с ...

spyOn(angular, "element").and.callThrough();

и проверить с помощью стандарта expect()

Не могу test addClass и removeClass, тем не менее, поскольку насмешливый элемент angular может сломать приложение при модульном тестировании с некоторыми нечетными angular ошибками.

Это, вероятно, должно быть достаточно для наших тестовых случаев.

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