Я читал сообщения, связанные с тем, чтобы не повторять вопрос.Почему ответ на единичный тест всегда успешный?
У меня есть следующий код модульного тестирования:
describe('service', function() {
var questionApiService;
beforeEach(module('myApp'));
beforeEach(inject(function (_questionApiService_) {
questionApiService = _questionApiService_;
}));
// Test service availability
it('check the existence of get field question service', inject(function(questionApiService) {
//expect(1).toEqual(100);
questionApiService.getField()
.then(function(data) {
//console.log(data);
expect(1).toEqual(100);
});
}));
});
Если я запустил код expect(1).toEqual(100);
вне службы, результатом будет Ошибка, но если я напишу тот же код expect(1).toEqual(100);
внутри службы, результатом будет Успех, что заставляет меня думать, что валидатор не входит в сервис.
Что-то не так?
EDIT 1:
Здравствуйте Аста, я думаю, ур идея очень хорошая и я пытаюсь реализовать. У меня ошибка в моем коде, и я не знаю, как сделать отладку:
defer = $q.defer();
spyOn(questionApiService, 'getField').andReturn(defer.promise);
defer.resolve(data);
expect(data.nextQ).toEqual(1);
Мое тестирование модулей всегда терпит неудачу. Если обещание будет успешным, объект «data» должен иметь атрибут nextQ.
EDIT 2:
Привет Аста, ваш код является удивительным. Я пытаюсь выполнить ваш код в моей системе и все еще с ошибкой. Ут терпит неудачу:
Ошибка: Неожиданный запрос: GET http://mi.url.com/api/thefield Нет больше запрос не ожидал
ли и знаю, что не так? Уточните, что код отлично работает в моем приложении, но проблема - проблема.
Вопрос Api код услуги:
angular.module('myApp.services')
.factory('questionApiService', function($http, $q) {
var myService = {
getField: function() {
var defer = $q.defer();
$http.get('http://mi.url.com/api/thefield')
.success(function(data) {
defer.resolve(data);
})
.error(function(data) {
defer.reject(data);
});
return defer.promise;
};
return myService;
});
Ваш тест:
describe('myApp', function() {
beforeEach(function() {
module('myApp');
});
describe('questionApiService', function() {
it('should check the existence of get field question service', inject(function($rootScope, questionApiService) {
var response = null;
var promise = questionApiService.getField();
promise.then(function(data) {
response = data;
});
$rootScope.$apply();
var expectedResponse = { "nextQ": 1 };
console.log(response);
//expect(JSON.parse(response.nextQ)).toEqual(expectedResponse.nextQ);
}));
});
});
Предоставление кода функции 'getField' было бы полезно. – yazaki
Привет, Yazaki, функция getField - это служба, которая возвращает объект json. В моем приложении работает нормально, но я не знаю, что происходит в ut. Спасибо. – Sommer
Для отладки вы можете проверить выходную форму с ошибкой 'ожидать'. Если 'ожидать (данные) .toEqual (1);' fail, то выход Jasmine должен сообщать вам, почему это не удалось, то есть ожидалось, что-то 'равное' что-то '. Если ваши данные имеют свойство nextQ, то это должно быть на выходе – Asta