#gruntjs #yeoman #yeoman-generator-angular
#gruntjs #йомен #yeoman-генератор-angular
Вопрос:
я следовал этому руководству от Codelab и yeoman. При правильной реализации вы используете локальное хранилище для хранения списка задач. У меня проблемы с настройкой моих тестов, чтобы проверить, работает ли это. Это то, что у меня есть до сих пор:
'use strict';
describe('Controller: MainCtrl', function () {
// load the controller's module
beforeEach(module('yeoTodoApp'), module('LocalStorageModule'));
var MainCtrl,
scope;
// Initialize the controller and a mock scope
beforeEach(inject(function ($controller, $rootScope, $httpBackend) {
scope = $rootScope.$new();
MainCtrl = $controller('MainCtrl', {
$scope: scope
});
}));
it('should add items to the list', function () {
var beforeLength = scope.todos.length;
scope.todo = 'Test 1';
scope.addTodo();
var afterLength = scope.todos.length;
expect(afterLength-beforeLength).toBe(1);
});
it('should add items to the list then remove', function () {
var beforeLength = scope.todos.length;
scope.todo = 'Test 1';
scope.addTodo();
scope.removeTodo(0);
var afterLength = scope.todos.length;
expect(afterLength-beforeLength).toBe(0);
});
});
Ошибка, которую я получаю,
строка 12 col 68 ‘$httpBackend’ определена, но никогда не использовалась. });
Как бы я написал свои модульные тесты для размещения в локальном хранилище?
Комментарии:
1. ваша ошибка — ошибка jslint, просто удалите $httpBackend из аргументов вашей функции…
2. Спасибо за помощь. Если я удалю $httpBackend из аргументов моей функции, я получу те же тесты, что и без localstorage
Controller: MainCtrl should add items to the list then remove FAILED
Ответ №1:
Я думаю, что на данный момент идея как бы издевается над вашим локальным хранилищем:
Написание модульных тестов
Для дополнительной проблемы вернитесь к модульному тестированию на шаге 8 и подумайте, как вы могли бы обновить свои тесты теперь, когда код использует локальное хранилище.
Совет: это не прямой ответ и требует знания о макетных сервисах. Ознакомьтесь с рекомендациями по модульному тестированию в AngularJS, в частности, с издевательскими сервисами и модулями в разделе AngularJS.
С тех пор, как был задан этот вопрос, возможно, что-то изменилось. Во всяком случае, вот мое решение:
'use strict';
describe('Controller: MainCtrl', function () {
// load the controller's module
beforeEach(module('mytodoyoappApp'));
var MainCtrl,
scope,
localStorage, store;
// Initialize the controller and a mock scope
beforeEach(inject(function ($controller, $rootScope) {
scope = $rootScope.$new();
MainCtrl = $controller('MainCtrl', {
$scope:scope
// place here mocked dependencies
});
/*mock the localStorageService*/
store={};
localStorage = {
set: function(key, value) {
store[key] = value;
},
get: function(key) {
return store[key];
}
};
}));
it('should check the list length', function () {
expect(MainCtrl.todos.length).toBe(0);
});
it('should add items to the list', function () {
MainCtrl.todoadded = 'Test 1';
MainCtrl.addTodo();
expect(MainCtrl.todos.length).toBe(1);
});
it('should add then remove an item from the list', function () {
MainCtrl.todoadded = 'Test 2';
MainCtrl.addTodo();
MainCtrl.removeTodo(0);
expect(MainCtrl.todos.length).toBe(0);
});
it('should check that the localstorage is undefined before being set', function() {
var a=localStorage.get('todos');
expect(a).toBeUndefined();
});
it('should set and get the localstorage', function() {
localStorage.set('todos', ['Test 3']);
var a=localStorage.get('todos');
expect(a).toEqual(['Test 3']);
localStorage.set('todos', ['Test 4']);
var b=localStorage.get('todos');
expect(b).toEqual(['Test 4']);
});
});
Ответ №2:
теперь ваша настройка верна (после удаления $httpBackend из списка аргументов)
Controller: MainCtrl should add items to the list then remove FAILED
эта ошибка является простой тестовой ошибкой, которая означает, что ваш код где-то работает не так, как ожидалось (ваш второй тест завершается неудачей)
я бы для себя проверил длину todos, а не результат математической операции.
я бы написал для ваших тестов тест следующим образом:
it('should add items to the list then remove', function () {
scope.todo = 'Test 1';
expect(scope.todos.length).toBe(0);
scope.addTodo();
expect(scope.todos.length).toBe(1);
scope.removeTodo(0);
expect(scope.todos.length).toBe(0);
});
вы используете jasmine в качестве инструмента тестирования. jasmine регистрирует ошибки, которые точно не соответствуют ожиданиям, поэтому вы должны получить что-то вроде
expect '1' to be '0'
идите оттуда!