내 Mocha/Chai `expect.to.throw` 어설션이 발생한 오류를 포착하지 못하는 이유는 무엇입니까?

DDD
풀어 주다: 2024-11-18 03:02:02
원래의
413명이 탐색했습니다.

Why Does My Mocha/Chai `expect.to.throw` Assertion Fail to Catch Thrown Errors?

Mocha/Chai Expect.to.throw 퍼즐: 던진 오류 잡기

Chai의 Expect.to.throw 주장은 잡기 힘든 것 같습니다. 오류가 올바르게 발생했습니다. 테스트 사례를 작성했음에도 불구하고 Expect.to.throw를 사용한 어설션이 반복적으로 실패합니다.

명확하게 설명하기 위해 다음 코드 조각을 고려해 보겠습니다.

it('should throw an error if you try to get an undefined property', function (done) {
  var params = { a: 'test', b: 'test', c: 'test' };
  var model = new TestModel(MOCK_REQUEST, params);

  expect(model.get('z')).to.throw('Property does not exist in model schema.');
  expect(model.get('z')).to.throw(new Error('Property does not exist in model schema.'));
});
로그인 후 복사

나타나는 대로 문제는 Expect.to.throw에 표현식을 전달하는 방식에 있습니다.

해결책: 래핑 함수

이 문제를 해결하려면 Expect.to.throw에 함수를 전달해야 하며, 이후에 이 함수가 호출됩니다. 다음 조정 코드는 이제 의도한 대로 작동합니다.

it('should throw an error if you try to get an undefined property', function (done) {
  var params = { a: 'test', b: 'test', c: 'test' };
  var model = new TestModel(MOCK_REQUEST, params);

  expect(model.get.bind(model, 'z')).to.throw('Property does not exist in model schema.');
  expect(model.get.bind(model, 'z')).to.throw(new Error('Property does not exist in model schema.'));
});
로그인 후 복사

바인드 메소드를 사용하여 호출 시 이 세트를 model로 설정하고 초기 인수 세트를 사용하여 model.get을 호출하는 새 함수를 생성합니다.

바인딩 설명

이러한 맥락에서 바인드는 매우 중요한 역할을 합니다. 역할. 원본과 동일한 인수를 허용하지만 호출 시 이에 대한 특정 값을 사용하는 새 함수를 생성합니다. 우리의 경우 this 값은 model이고 인수는 'z'입니다.

model.get('z')의 결과를 Expect.to.throw에 전달할 때 본질적으로 Throw된 항목을 전달합니다. 주장에 오류가 있습니다. 그러나 Expect.to.throw의 목적은 호출 시 주어진 함수에 의해 예외가 발생하는지 확인하는 것입니다. 따라서 결과보다는 함수 자체를 전달해야 합니다. 바인딩 방법을 사용하면 바로 이러한 작업이 가능합니다.

바인드에 대한 자세한 내용은 제공된 링크를 참조하세요.

위 내용은 내 Mocha/Chai `expect.to.throw` 어설션이 발생한 오류를 포착하지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿