Подтвердить что ты не робот

Jasmine 2.0 async done() и angular -mocks inject() в том же тесте it()

Мой обычный тестовый пример выглядит как

it("should send get request", inject(function(someServices) {
     //some test
}));

И асинхронный тест Jasmine 2.0 должен выглядеть как

it("should send get request", function(done) {
     someAsync.then(function(){
         done();
     });
});

Как я могу использовать как сделанные, так и впрыскивать в одном тесте?

4b9b3361

Ответ 1

Это должно работать; Я столкнулся с той же проблемой, когда обновился до Jasmine 2.0

it("should send get request", function(done) {
    inject(function(someServices) {
        //some async test
        done();
    })(); // function returned by 'inject' has to be invoked
});

Ответ 2

Чтобы добавить к ответу @Scott Boring и комментарий @WhiteAngel, который отметил, что код внутри приложения никогда не вызывался.

Это сработало для меня:

it("should send get request", function(done) {
    inject(function(someServices) {
       //some async test
       done();
    })();
});

Ответ 3

ВАЖНОЕ примечание - это скобки после вызова inject. Например.

inject(function(someServices) {
   //some async test
   done();
})();  <-- these brackets here important.

Если вы посмотрите на тип inject:

export declare function inject(tokens: any[], fn: Function): () => any;

Вы можете видеть, что он возвращает функцию, поэтому вы не получаете выход, потому что вы забыли вызвать функцию!!

Если вы думаете об этом, имеет смысл, что он возвращает функцию, потому что it выполняет функцию!

Поэтому дополнительные парнеры должны решить всю проблему!

Рабочий пример:

  it('should allow you to observe for changes', function(done) {
    inject([GlobalStateService], (globalStateService: GlobalStateService) => {
      globalStateService.observe("user", storageType.InMemoryStorage, (user: string) => {
        expect(user).toBe("bla");
        done();
      });

      globalStateService.write({ user: "bla"}, storageType.InMemoryStorage);
    })();
  });

Ответ 4

Вы можете написать тест следующим образом:

describe("Some service'", function () {    
    var service;
    var data;

    beforeEach(function (done) {   

        module('app');

        inject(function (someService) {
            service = someService;
        });

        service
            .getData()
            .then(function(result) {
                data = result;
                done();
            });
    }); 

    it('should return a result', function () {  
        expect(data).toBeDefined();
    }); 
}