2016-02-23 2 views
0

У меня возникла проблема с обратным значением обещания при вызове функции контроллера. Вызывается функция, а затем вызывается метод службы, но возвращаемые данные не определены. Нужно ли мне высмеивать возвращаемое значение или я могу вернуть фактическое значение, так как он запускает stubby, который возвращает объект JSON.тест жасмина доступ к обещанию внутри контроллера

я следующий метод контроллера (упрощенный для краткости)

function init() { 
      myService.myServiceMethod() 
       .then(function(data) { 
        vm.myvalue = data[0].results; 
       }); 
     } 

     vm.init(); 

и мой тест проблема

 $httpBackend.whenGET('/myendpoint').respond(data); 


     $httpBackend.expectGET('/myendpoint').respond(data); 


     myService.myServiceMethod().then(function (data) { 
      console.log(data); 

     }); 

     // $httpBackend.flush(); // Flush the backend. Important! 
     scope.$digest(); 

     expect(data).toBeDefined(); 
+0

Вы смотрите на функции Jasmine 'done()'? –

ответ

0

Сроки:

myService.myServiceMethod().then(function (data) { 
    console.log(data); 
    // data is filled here, if myServiceMethod() has some response 
}); 

// data is undefined!!! 
// Why? The service call is asynchron, so you have to put the expect inside it 
expect(data).toBeDefined(); 

-

myService.myServiceMethod().then(function (data) { 
    expect(data).toBeDefined(); 
    }); 
+0

Я попробовал это изначально. Если я высмеиваю объект данных и затем возвращаю обещание, данные все равно возвращаются undefined. – Jimi

+0

Если вы делаете это, как описано выше, он должен работать. Даже если вы издеваетесь над объектом данных (в вызове службы), это все еще проблема синхронизации, потому что его асинхронный. – CodeNashor

Смежные вопросы