>

Jasmine으로 테스트 중이며 스파이 구현을 발견했습니다.

이 코드는 다음과 같습니다.

describe("A spy", function() {
  let foo;
  let bar = null;
  beforeEach(function() {
    foo = {
      setBar: function(value) {
        bar = value;
      }
    };
    spyOn(foo, 'setBar');
    foo.setBar(123);
    foo.setBar(456, 'another param');
    console.log(bar)
  });
  it("tracks all the arguments of its calls", function() {
    expect(foo.setBar).toHaveBeenCalledWith(123);
    expect(foo.setBar).toHaveBeenCalledWith(456, 'another param');
    expect(bar).toBeNull(); /* Why is this NULL it should be 456 because it the last value we called our function with!!!*/
  });
});

이 의견을 추가했습니다 /* Why is this NULL it should be 456 !!!*/  내가 이해하지 못하는 것을 명확히하기 위해. 이 코드 때문에 :

let bar1 = null
let foo1 = {
      setBar: function(value) {
        bar1 = value;
      }
    }
     foo1.setBar(123);
    foo1.setBar(456, 'another param');
    console.log(bar1) // 456

프린트 456 .


  • 답변 # 1

    spyOn 를 활성화 한 경우  함수 (여기서 foo.setBar)가 호출되면 기본적으로 jasmine은 실제 함수를 호출하지 않고 세부 정보 만 추적합니다.

    실제 함수를 호출하려면 spyOn(foo, 'setBar').and.callThrough(); 를 지정해야합니다  그냥 spyOn(foo, 'setBar') 대신 .

    그 후에 expect(bar).toBeNull() 를 관찰 할 수 있습니다  실패하고 expect(bar).toBe(456)  성공할 것이다.

관련 자료

  • 이전 R에서 SPSS 함수를 다시 코딩하여 단일 새 변수를 작성하는 방법이 있습니까?
  • 다음 c# - XamarinForms에서 m3u8 비디오 파일을 라이브 스트리밍하는 방법