Moja zwykła sprawa testowa wygląda jak

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

I test asynchentyczny Jasmine 2.0 powinien wyglądać

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

Jak mogę użyć obu wykonanych i wstrzykiwać w jednym teście?

64
huston007 13 sierpień 2014, 01:14

5 odpowiedzi

Najlepsza odpowiedź

To powinno działać; Pobiegłem do tego samego problemu, gdy zaktualizowałem do 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
});
81
André R. 18 styczeń 2017, 11:37

Ważna uwaga to wsporniki po rozmowie inject. Na przykład.

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

Jeśli spojrzysz na typ inject:

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

Możesz zobaczyć, że zwraca funkcję, więc nie otrzymałeś wyjścia, ponieważ zapomniałeś zadzwonić do funkcji !!

Jeśli o tym myślisz, ma sens, że zwraca funkcję, ponieważ it zajmuje funkcję!

Więc dodatkowe nawiasy powinny rozwiązać cały problem!

Przykład roboczy:

  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);
    })();
  });
22
anstue 26 wrzesień 2018, 11:00

Aby dodać do odpowiedzi @Scott nudny i komentarz @whiteangel, który wspomniał, że kod wewnątrz wstrzykiwań nigdy nie został wezwany.

To zadziałało dla mnie:

it("should send get request", function(done) {
    inject(function(someServices) {
       //some async test
       done();
    })();
});
11
Pierre-Luc Gregoire 6 lipiec 2016, 14:03

Możesz napisać taki test:

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();
    }); 
}
2
David Bohunek 13 sierpień 2014, 10:25

Dla kątowego 5.2.0: Podejście @ scott-nudne nie działało dla mnie. Co robił pracę, aby uzyskać usługi zamiast {x1}}, jak opisano w Dokumenty:

describe('TooltipComponent', () => {
  let component: TooltipComponent;
  let fixture: ComponentFixture<TooltipComponent>;
  let myService: MyService;

  beforeEach(async(() => {
    const myServiceSpy = jasmine.createSpyObj('MyService', ['calc']);

    TestBed.configureTestingModule({
      declarations: [ MyComponent ],
      providers: [
        {provide: MyService, useValue: myServiceSpy}
      ]
    })
    .compileComponents();

    myService = TestBed.get(MyService);
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(MyComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });

  it('should render correctly', (done) => {
    component.render();

    setTimeout(() => {
      expect(myService.calc).toHaveBeenCalled();
      done();
    }, 1000);
  });
1
frot.io 25 kwiecień 2018, 12:24