Итак, вот что. Я изучал много потоков, но не мог найти ничего, связанного с моей ошибкой. Я пытаюсь проверить свое угловое приложение (сначала хочу уточнить, что я являюсь любопытным новичком в UnitTesting)
Согласно this tutorial Я настроил все, и основные тесты работают нормально. Но когда я включаю модуль NgMock, мое реальное угловое приложение и пишу простой тест для тестирования метода на одном из моих контроллеров, я получаю следующий стек.
grunt karma:dev
Running "karma:dev" (karma) task
25 03 2016 20:41:24.754:INFO [karma]: Karma v0.13.22 server started at http://localhost:9876/
25 03 2016 20:41:24.763:INFO [launcher]: Starting browser Chrome
25 03 2016 20:41:24.771:INFO [launcher]: Starting browser Firefox
25 03 2016 20:41:28.747:INFO [Chrome 49.0.2623 (Windows 10 0.0.0)]: Connected on socket /#yRHoLsbEaJWHNtSDAAAA with id 47988329
Chrome 49.0.2623 (Windows 10 0.0.0) Unit tests del CRM: Create new message Should create a text message with the correct structure FAILED
TypeError: $scope.$on is not a function
at new <anonymous> (C:/Users/Pablo/Data/software/workspace/intellij/leadaki-core/public/dashboard/v4/js/controllers/view-conversations.js:248:12)
at e (C:/Users/Pablo/Data/software/workspace/intellij/leadaki-core/public/dashboard/v4/js/angular.min.js:39:156)
at Object.instantiate (C:/Users/Pablo/Data/software/workspace/intellij/leadaki-core/public/dashboard/v4/js/angular.min.js:39:273)
at C:/Users/Pablo/Data/software/workspace/intellij/leadaki-core/public/dashboard/v4/js/angular.min.js:80:228
at C:/Users/Pablo/Data/software/workspace/intellij/leadaki-core/public/dashboard/v4/js/angular-mocks.js:1848:12
at Context.<anonymous> (C:/Users/Pablo/Data/software/workspace/intellij/leadaki-core/test/frontend/leadaki-app-tests.js:44:30)
Chrome 49.0.2623 (Windows 10 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.087 secs/0.024 secs)
Firefox 45.0.0 (Windows 10 0.0.0) Unit tests del CRM: Create new message Should create a text message with the correct structure FAILED
$scope.$on is not a function
@C:/Users/Pablo/Data/software/workspace/intellij/leadaki-core/public/dashboard/v4/js/controllers/view-conversations.js:248:5
[email protected]:/Users/Pablo/Data/software/workspace/intellij/leadaki-core/public/dashboard/v4/js/angular.min.js:39:154
h/<[email protected]:/Users/Pablo/Data/software/workspace/intellij/leadaki-core/public/dashboard/v4/js/angular.min.js:39:273
Xe/this.$get</<@C:/Users/Pablo/Data/software/workspace/intellij/leadaki-core/public/dashboard/v4/js/angular.min.js:80:226
angular.mock.$ControllerDecorator</<@C:/Users/Pablo/Data/software/workspace/intellij/leadaki-core/public/dashboard/v4/js/angular-mocks.js:1848:12
@C:/Users/Pablo/Data/software/workspace/intellij/leadaki-core/test/frontend/leadaki-app-tests.js:44:30
Chrome 49.0.2623 (Windows 10 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.087 secs/0.024 secs)
Firefox 45.0.0 (Windows 10 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.053 secs/0.011 secs)
Warning: Task "karma:dev" failed. Use --force to continue.
Aborted due to warnings.
Похоже, что «макет» рамка, что ngMock генерирует не принимает иметь слушатель или что-то подобное.
Есть ли у кого-нибудь намек на ошибку?
Я мог бы вставить все мои файлы конфигурации, но я думаю, что это слишком много информации, и я не хочу наводнять сообщение. Дайте мне знать, нужна ли какая-либо другая информация, и я добавлю ее.
Спасибо, продвинутый!
describe('Unit tests del CRM: ', function() {
before(function() {
if (window.__html__) {
document.body.innerHTML = window.__html__['test/index.html'];
}
});
beforeEach(angular.mock.module('appCliengo'));
var $controller;
var $rootScope;
beforeEach(angular.mock.inject(function(_$rootScope_, _$controller_){
$rootScope = _$rootScope_;
$controller = _$controller_;
}));
describe('Create new message', function() {
it('Should create a text message with the correct structure', function() {
var $scope = {};
var controller = $controller('Contacts.viewConversation', { $scope: $scope });
var messageBody = 'Hola, me gustaria comprar un auto';
var newTextMessage = $scope.createMessage('text/plain', '123456789', 'user', 'abcdefghijk', messageBody);
expect(newTextMessage.body).to.equal(messageBody);
});
});
});
Если. вы смотрите на код, вы привязываете переменную $ scope к параметру $ scope вашего контроллера. Это означает, что при попытке вызвать $ scope. $ On вы действительно пытаетесь вызвать {}. $ On. Интерпретатор правильно говорит вам, что там ничего нет. Вы можете использовать $ scope: $ rootScope или сделать $ scope реальным объектом области с помощью: $ scope = $ rootScope. $ New(); –
Спасибо! Теперь работает! –