单元测试服务元素类更改

时间:2016-02-26 16:00:56

标签: angularjs unit-testing jasmine karma-jasmine angularjs-service

我有一个服务,可以为几个HTML元素添加/删除类。

我正在尝试根据调用的方法测试这些更改。

define(['require', 'angular'], function (require, angular) {
    'use strict';

    var myFactory = function () {

        var header = angular.element("#app-header");
        var footer = angular.element(document.getElementsByClassName("app-footer"));
        var change = false;

        return {
            red: function() {
                header.addClass("alert-warning");
                footer.removeClass("notify");
                change = true;
            },
            black: function() {
                if (change) {
                    this.red();
                }
            }
        };
    };

    return myFactory;
});

我试过了:

describe('<-- MyFactory Spec ------>', function () {

    var myFactory, $compile, scope;

    beforeEach(angular.mock.module('MyApp'));

    beforeEach(inject(function(_myFactory_, _$compile_, _$rootScope_){
        myFactory = _myFactory_;
        $compile = _$compile_;
        scope = _$rootScope_.$new();
    }));

    it('should open the menu', function(){
        var header = angular.element("#app-header");
        header = $compile(header)(scope);
        scope.$digest();
        myFactory.red();
        scope.$apply();
        expect(header).toHaveClass('alert-warning');
        expect(change).toBeTruthy();
    });
});

有了上述内容,我收到错误:

TypeError: 'undefined' is not a function (evaluating 'expect(header).toHaveClass('alert-warning')')

1 个答案:

答案 0 :(得分:0)

我怀疑你没有吸引jasmine-jquery匹配器。

.toHaveClass(...)

不是标准的Jasmine匹配器,您需要使用jasmine-jquery

添加它