У меня есть контроллер, который вызывает службу, которая является оболочкой для Ресурса. Например:Контроллер тестирования, который зависит от службы, основанной на ресурсе
app.factory("Service", ["$resource", function ($resource) {
return $resource("/api/Service/get");
}]);
Возвращаемое значение метода услуги присваивается переменной внутри контроллера. Обычно переменная имеет тип Resource
и содержит promise
. Когда обещание будет разрешено, переменная заполняется всеми значениями, возвращаемыми из бэкэнд. Я отслеживаю , затем на обещании, чтобы изменить модель, полученную от бэкэнд. Как так:
this.model = Service.get();
this.model.$promise.then(function(data) {
// do something with data
});
мне нужно проверить значение результирующего модели переменных в моем контроллере. Единственным способом, который я нашел для этого, является использование $ httpBackend с реальной реализацией моего Сервиса. Однако это уродливо, потому что тогда, тестируя мой контроллер, я должен пройти путь запроса "api/Service/get"
до httpBackend.when(), чтобы он мог ответить некоторым значением.
Отрывок образуют мой тест:
// call Controller
$httpBackend.when('GET', '/api/Service/get').respond(someData);
$httpBackend.flush();
expect(scope.model.property).toBe(null);
Это, кажется, и чувствует себя совершенно неправильно. Весь смысл использования отдельной службы для работы с ресурсом заключается в том, что контроллер не знает ничего о имени метода url и http. И что же мне делать?
Другими словами, я хочу проверить, что then
получает вызов и делает то, что мне нужно для этого.
Возможно, я мог бы создать отдельную службу, которая вызывается в then
, и делать то, что мне нужно сделать с моделью, но она чувствует себя немного перехитрить, если все, что я хочу сделать, это, например, установить одно поле в null в зависимости от простого условия.
ли эта работа для вас ? – tasseKATT