ogarich89
@ogarich89
Front-End Developer

Как тестировать с помощью Jasmine в связке с Angular + RequireJS?

Как писать тесты используя такую структуру приложения https://habrahabr.ru/post/225931/

С помощью karmaJS test runner и jasmineJS

Контроллер

define(['../module'], function (controllers) {
	'use strict';
	controllers.controller('topMenuCtrl', ['$scope','$http', function ($scope, $http) {
		$scope.list = [];
		$scope.get = function () {
			$http.get('../../../DB/options.json').success(function (response) {
				$scope.options = response;
				$scope.list = response;	
			});
		};
	}]);
});


Тест

define([
	'angular',
	'app/app',
	'angularMocks'
], 
function (angular, app) {
	describe('app', function() {
		var scope, ctrl, httpBackend;

		beforeEach(module(app));

		beforeEach(inject(function (_$httpBackend_, $rootScope, $controller) {
			httpBackend = _$httpBackend_;

			httpBackend.when('GET', '../../../DB/options.json').respond(['Hello world!']);

			scope = $rootScope.$new();

			ctrl = $controller('TopMenuCtrl', {
				$scope: scope
			});
		}));

		it('list', function() {
			expect(scope.list).toEqual([]);
		});
	});
});


Выдаёт ошибку Error: [ng:areq] errors.angularjs.org/1.5.5/ng/areq?p0=TopMenuCtrl&... (line 23)

Подскажите как подгружать модули используя такую структуру кода
  • Вопрос задан
  • 165 просмотров
Решения вопроса 1
ogarich89
@ogarich89 Автор вопроса
Front-End Developer
Разобрался сам =)
define([
	'angular',
	'app/app',
	'app/controllers/module',
	'angularMocks'
	], 
	function (angular, app, controllers) {
		describe('app', function() {
			var scope, ctrl, httpBackend;

			beforeEach(module('app.controllers'));

			beforeEach(inject(function (_$httpBackend_, $rootScope, $controller) {
				httpBackend = _$httpBackend_;

				httpBackend.when('GET', '../../../DB/options.json').respond(['Hello world!']);

				scope = $rootScope.$new();

				ctrl = $controller('topMenuCtrl', {
					$scope: scope
				});
			}));

			it('list', function() {
				expect(scope.list).toEqual([]);
			});
		});
	});


Во первых затупил с названием контроллера, не TopMenuCtrl, a topMenuCtrl. Во вторых надо передать кроме модуля app ещё и модуль controllers. После чего обращаемся к нему так
beforeEach(module('app.controllers'));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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