测试 $state.go 的自定义方法

Testing a custom method for $state.go

我尝试测试这段代码:

redireccion() {
this.$state.go('modifyLine', {lineId: this.look()._id});
}

look() {
return Entries.findOne({name: this.entry.name});
}

上面的代码方法没问题(看),但是对于 'redireccion' 我试过类似的东西,但我得到了一个错误。

这是代码:

    describe('redireccion()', () => {
      beforeEach( inject(($state) => {
      spyOn($state, 'go');
      spyOn(controller, 'look');
      spyOn(Entries, 'findOne');
      }));

    it('should be a ... bla bla', () => {
    controller.redireccion();
    expect($state.go).toHaveBeenCalledWith('modifyLine', {lineId: });
    });
   });

这是一个摘录,因为我真的不知道如何测试它。

我会尽量给你一个见解。您应该尝试隔离测试...这意味着如果您正在测试重定向,则可以模拟 look 方法,因为它不相关(对于此特定测试)。

 describe('testing redirection()', () => {
       beforeEach( inject(($state) => {
            //here I'm saying that I'm spying every call to $state.go
            spyOn($state, 'go');

            //And here I'm that I'm not only spying every call to 
            //controller.look() but I'm also replacing the original
            //implementation with my fake one. Every call will basically 
            //return an object with id equals 10
            spyOn(controller, 'look').and.callFake(() => {
                 var mockedLine = {
                     _id: 10
                 };
                 return mockedLine;
            });
       }));

       it('should call state.go', () => {
            controller.redireccion();

            //if you just want to check if the method was called, do the following:
            expect($state.go).toHaveBeenCalled();

            //if you need to also check the arguments, try:
            var args = $state.go.mostRecentCall.args;
            expect(args[0]).toBe('modifyLine');
            expect(args[1].lineId).toBe(10);
       });
  });