0

Я пытаюсь проверить асинхронную службу $ ресурсов на Angular. Во-первых, обратите внимание, что я не хочу издеваться над $ resource, я действительно хочу получить результаты и протестировать их.

Так что в основном мой метод getCountries использует только ресурс Angular's, чтобы возвращать массив стран.

Метод

getCountries(): any { 
     var countries = this.$resource(
      this.apiEndpoint.baseUrl, 
      { 
       'get': { 
        method: 'GET', isArray: false 
       } 
      }); 
     return countries; 
} 

В моей спецификации у меня возникают проблемы с тем, где запустить метод Жасмин сделал(). Пожалуйста, прочитайте комментарии в коде.

Spec

describe(module',(): void => { 
    var one; 
    var SelfRegistrationResourceBuilder; 

    beforeEach((): void => { 
     angular.mock.module(
      'BuilderModule', 
      'ngResource' 
     ); 

     inject(
      ['Builder', (_SelfRegistrationResourceBuilder _: ISelfRegistrationResourceBuilder): void => { 
       SelfRegistrationResourceBuilder = _SelfRegistrationResourceBuilder_; 
      }]); 
    }); 


    describe('getCountries',(): void => { 

     beforeEach((done) => { //done is a parameter in beforeEach 
      SelfRegistrationResourceBuilder.getCountries().get(
       (value: any) => { 
        console.log("no error"); 
        one = "aValue"; 
        done(); //Do I have to call done() here 
       }, (error: any) => { 
        console.log("error"); 
        one = "aValue"; 
        //done(); What about here 
       }) 
      //done(); ..or here 
     }); 

     it("should...", (done) => { 
      expect(one).toBe("aValue"); 
      //done(); and here? 
     }); 
    }); 
}); 

Так что моя проблема, кажется, что когда я запускаю мой код, я либо получаю сообщение об ошибке указана в названии этой проблемы, или если я поиграться с какой проделанными() методами I вызов, то моя переменная с именем «один» не определена, поэтому подразумевается, что обратные вызовы с успехом и ошибками никогда не вызывались. Я также могу доказать, что призывы к успеху и ошибкам никогда не вызываются, потому что их console.log() s никогда не печатаются на консоли.

Наконец, , когда я проверяю сетевой раздел инструментов разработчика в своем браузере, я не вижу никаких запросов на сервер. Может кто-то, пожалуйста, попробуй помочь мне здесь, я думаю, что большинство из них выяснилось, кроме вызова done().

Благодаря

ответ

0

done для асинхронных испытаний. Если тест не асинхронный не использует done т.д .:

// No done needed 
    it("should...",() => { 
     expect(one).toBe("aValue"); 
    }); 

Для асинхронных тестов называют его после асинхронной операции завершение. Итак:

beforeEach((done) => { //done is a parameter in beforeEach 
     SelfRegistrationResourceBuilder.getCountries().get(
      (value: any) => { 
       console.log("no error"); 
       one = "aValue"; 
       done(); // Yes call done 
      }, (error: any) => { 
       console.log("error"); 
       one = "aValue"; 
       // do not call done. You most likely want to throw to show this is an error case. 
      }) 
    }); 
+0

спасибо за вашу помощь, но делать это по-прежнему дает мне ту же ошибку, и мой «один» переменная до сих пор не определено – Archmede

+0

, но все это происходит потому, что мои обратные вызовы никогда не дозвонились – Archmede

+0

чтение [это] (HTTP: //stackoverflow.com/questions/30346214/run-angularjs-resource-tests-without-mocking-responses) говорит мне, что это невозможно сделать – Archmede

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