AngularJS - фильтр $ не в глобальной области видимости

Я пытаюсь написать модульный тест для фильтра, который я написал в Angular (1.0.7). Этот фильтр работает на реальной странице, поэтому я знаю, что он правильно регистрируется. Но я хочу написать для него модульный тест.

var application = angular.module('Customer', []);    
application.filter('date', function () {
    return function (date) {
        return moment(date).format('MM/DD/YYYY');
    };
});

В верхней части тестовой страницы я включаю файл angular.js.

<script type="text/javascript" src="../angular.js"></script>

Предположительно, существует функция $filter для получения зарегистрированных фильтров. Мой отладчик просто сходит с ума и говорит, что его там нет. Я вижу фактическую переменную angular, поэтому я знаю, что angular включен правильно.

Мне интересно, отсутствует ли у меня файл .js или $filter находится в другой области или в более новой версии angular.


person Travis Parks    schedule 15.08.2013    source источник


Ответы (1)


Вы можете использовать $filter('date') для получения фильтра date, внедрив модуль $filter перед собственно тестовой заглушкой. Я создал для вас рабочую демонстрацию, и, пожалуйста, взгляните на необходимые файлы JS.

describe('date', function () {
    var dataFilter;
    beforeEach(angular.mock.module('Customer'));

    beforeEach(function () {
        angular.mock.inject(function ($filter) {
            dataFilter = $filter('date');
        })
    });

    describe('date result', function () {
        it('should return filtered date', function () {
            var date = new Date(2013, 7, 15);
            expect(dataFilter(date)).toBe('08/15/2013');
        });
    });
});

Демо

person zs2020    schedule 15.08.2013
comment
Нужен ли мне файл ресурса .js, чтобы появился angular.mock.module? - person Travis Parks; 16.08.2013
comment
@TravisParks Вам это не нужно. :) Я включал это для чего-то еще, что пробовал. - person zs2020; 16.08.2013
comment
Хорошо. Раньше у меня была проблема, когда module по какой-то причине не было найдено под angular.mock. Я попробую еще раз. - person Travis Parks; 16.08.2013
comment
Немного поковырявшись, похоже, что angular.mock.module существует только в том случае, если вы используете Jasmine. Я использую Mocha с ожиданиями Chai. - person Travis Parks; 16.08.2013
comment
Существует поддержка Mocha после выпуска 1.1.1, но она еще не является частью выпуска стабильной сборки. Я думаю, что просто переключусь на Жасмин... они почти идентичны, если честно. - person Travis Parks; 16.08.2013
comment
@TravisParks Я использовал Mocha для своих приложений node.js с другим модулем под названием should, хотя синтаксис выглядит хорошо. - person zs2020; 16.08.2013