2014-01-27 3 views
2

Я пытаюсь настроить модульное тестирование на моем webapp с использованием мокко. Мой webapp использует AngularJs, и поскольку я все еще новичок в этой структуре, мне сложно установить это.Настроить модульное тестирование с помощью Mocha на приложении AngularJs

На самом деле, есть ли способ настроить это, используя ничего, кроме мокко? Я имею в виду, можно ли настроить мои модульные тесты без Karma или любых других тестовых бегунов (и без браузера)?

Вот мой код теста:

define(['angular'], function (angular) { 
var module = angular.module('MyModule', []); 

module.controller('MyController', ['$scope', '$window', function ($scope, $window) { 
     $scope.test = function() { 
      $window.alert('Not implemented yet.'); 
     }; 
    }]); 

    return module; 
}); 

А вот мой тестовый код:

require("chai"); 
require('../lib/angular/angular-mocks'); 

describe("Unit testing example", function() { 

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

    it('should test nothing', function() { 
     expect(true).to.be.true; 
    }) 

}); 

Когда я пытаюсь выполнить это, я получаю эту ошибку:

angular.mock = {}; 
^ 
ReferenceError: angular is not defined 

Спасибо вы за вашу помощь!

+0

К сожалению, я уверен, что мне нужно будет настроить карму или другой тестовый бегун, чтобы сделать это без причины (или запустить его через браузер), DOM не существует и требуется. Исправьте меня, если это не так;) – Jeep87c

+1

Я не обратился к этому в своем ответе, но ваш '' beforeEach' выглядит подозрительно. '' beforeEach' принимает функцию как параметр. Возвращает ли функция angular.mockule ('MyModule') функцию?Тот, который '' beforeEach'' может использовать? – Louis

ответ

4

Да, вам нужно что-то, что обеспечит некоторую среду браузера для вашего Углового кода. Существует несколько вариантов:

  • jsdom.

  • Безголовые решения, такие как PhantomJS.

  • Фактические браузеры.

Каждое из этих решений обеспечивает среду браузера, которая постепенно приближается к «реальной вещи».

Что вам нужно точно зависит от:

  • Это минимум AngularJS требует. Я не использую AngularJS, поэтому я не знаю, каков этот минимум.

  • Какой минимальный ваш требуется собственный код.

Например, я использовал jsdom для модульных тестов для кода, который просто перемещается вверх и вниз по дереву DOM. Jsdom был идеален для этого. Однако, когда я пытался использовать jsdom для проверки кода, который использует MutationObserver, это не сработало, потому что jsdom не предоставляет этот API. Я должен был использовать настоящие браузеры для выполнения этих тестов.

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

+3

Наконец-то я пришел к этому решению: Грунт, карма и фантом. Игра с jsDom и AngularJs не была хорошей идеей в моем случае. Благодаря! – Jeep87c

Смежные вопросы