2015-07-21 19 views
11

Tôi đang sử dụng một điệp viên Jasmine (2.2.0) để xem có một cuộc gọi lại nào đó được gọi hay không.Đặt lại cuộc gọi trên điệp viên Jasmine không trả lại

mã kiểm tra:

it('tests', function(done) { 
    var spy = jasmine.createSpy('mySpy'); 
    objectUnderTest.someFunction(spy).then(function() { 
    expect(spy).toHaveBeenCalled(); 
    done(); 
    }); 
}); 

này hoạt động như mong đợi. Nhưng bây giờ, tôi đang thêm một cấp độ thứ hai:

it('tests deeper', function(done) { 
    var spy = jasmine.createSpy('mySpy'); 
    objectUnderTest.someFunction(spy).then(function() { 
    expect(spy).toHaveBeenCalled(); 
    spy.reset(); 
    return objectUnderTest.someFunction(spy); 
    }).then(function() { 
    expect(spy.toHaveBeenCalled()); 
    expect(spy.callCount).toBe(1); 
    done(); 
    }); 
}); 

Kiểm tra này không bao giờ trả về, vì dường như cuộc gọi lại done không bao giờ được gọi. Nếu tôi xóa dòng spy.reset(), kiểm tra sẽ kết thúc, nhưng rõ ràng là không thành công trên kỳ vọng cuối cùng. Tuy nhiên, trường callCount có vẻ là undefined, thay vì 2.

+0

là nó ném? –

+0

Thử thêm trình xử lý từ chối cho lời hứa của bạn. – robertklep

+0

đã thêm '.catch (done)' vào cuối chuỗi, cùng một vấn đề xảy ra. Vì vậy, @Daniel, nếu nó ném tôi không thể phát hiện ra nó. – Jorn

Trả lời

22

Cú pháp cho Jasmine 2 khác với 1,3 đối với các chức năng gián điệp. Xem tài liệu Jasmine here.

Cụ thể bạn thiết lập lại một điệp viên với spy.calls.reset();

Đây là cách kiểm tra nên trông giống như:

// Source 
var objectUnderTest = { 
    someFunction: function (cb) { 
     var promise = new Promise(function (resolve, reject) { 
      if (true) { 
       cb(); 
       resolve(); 
      } else { 
       reject(new Error("something bad happened")); 
      } 
     }); 
     return promise; 
    } 
} 

// Test 
describe('foo', function() { 
    it('tests', function (done) { 
     var spy = jasmine.createSpy('mySpy'); 
     objectUnderTest.someFunction(spy).then(function() { 
      expect(spy).toHaveBeenCalled(); 
      done(); 
     }); 
    }); 
    it('tests deeper', function (done) { 
     var spy = jasmine.createSpy('mySpy'); 
     objectUnderTest.someFunction(spy).then(function() { 
      expect(spy).toHaveBeenCalled(); 
      spy.calls.reset(); 
      return objectUnderTest.someFunction(spy); 
     }).then(function() { 
      expect(spy).toHaveBeenCalled(); 
      expect(spy.calls.count()).toBe(1); 
      done(); 
     }); 
    }); 
}); 

Xem fiddle here

+0

Cảm ơn! Dường như không phải tất cả tài liệu đều được cập nhật cho phiên bản mới: ( – Jorn

1

Một cách khác để viết nó:

spyOn(foo, 'bar'); 
expect(foo.bar).toHaveBeenCalled(); 
foo.bar.calls.reset(); 
Các vấn đề liên quan