programing

Mocha에서 발생한 오류 테스트

nasanasas 2020. 10. 26. 08:04
반응형

Mocha에서 발생한 오류 테스트


이 질문에 이미 답변이 있습니다.

이 문제에 대한 도움을 찾고 싶습니다. 내가 작성중인 응용 프로그램에 대한 테스트를 작성하려고합니다. 다음 샘플 코드에서 문제를 추출했습니다. 오류가 발생했는지 테스트하고 싶습니다. 저는 Testacular를 프레임 워크로 mocha와 어설 션 라이브러리로 chai를 사용하는 테스트 러너로 사용하고 있습니다. 테스트가 실행되었지만 오류가 발생하여 테스트가 실패했습니다! 어떤 도움이라도 대단히 감사합니다!

function iThrowError() {
    throw new Error("Error thrown");
}

var assert = chai.assert,
    expect = chai.expect;
describe('The app', function() {
    describe('this feature', function() {
        it("is a function", function(){
            assert.throw(iThrowError(), Error, "Error thrown");
        });
    });
});

함수를 assert.throws()올바른 방법으로 전달하지 않습니다 .

assert.throws()함수의 첫 번째 파라미터로서의 기능을 기대하고있다. 코드에서 iThrowError를 호출하고을 호출 할 때 반환 값을 전달합니다 assert.throws().

기본적으로 다음을 변경합니다.

assert.throws(iThrowError(), Error, "Error thrown");

이에:

assert.throws(iThrowError, Error, "Error thrown");

문제를 해결해야합니다.


최상위 답변에 추가 하여 테스트의 일부로 함수를 호출해야하는 경우 (즉, 특정 매개 변수가 전달 된 경우에만 함수가 오류를 발생시켜야 함) 익명 함수로 함수 호출을 래핑하거나 ES6 +에서, 화살표 함수 표현식으로 함수를 전달할 수 있습니다.

// Function invoked with parameter.
// TEST FAILS. DO NOT USE.
assert.throws(iThrowError(badParam), Error, "Error thrown"); // WRONG!

// Function invoked with parameter; wrapped in anonymous function for test.
// TEST PASSES.
assert.throws(function () { iThrowError(badParam) }, Error, "Error thrown");

// Function invoked with parameter, passed as predicate of ES6 arrow function.
// TEST PASSES.
assert.throws(() => iThrowError(badParam), Error, "Error thrown");

그리고 철저 함을 위해 좀 더 문자 그대로의 버전이 있습니다.

// Explicit throw statement as parameter. (This isn't even valid JavaScript.)
// TEST SUITE WILL FAIL TO LOAD. DO NOT USE, EVER.
assert.throws(throw new Error("Error thrown"), Error, "Error thrown"); // VERY WRONG!

// Explicit throw statement wrapped in anonymous function.
// TEST PASSES.
assert.throws(function () { throw new Error("Error thrown") }, Error, "Error thrown");

// ES6 function. (You still need the brackets around the throw statement.)
// TEST PASSES.
assert.throws(() => { throw new Error("Error thrown") }, Error, "Error thrown");

문제를 해결할 수 있었지만 특정 오류를 확인할 수 없었습니다. Chai의 expect / should 구문을 사용하여이를 수행하려면 throw () 의 다른 서명에서 매개 변수를 사용할 수 있습니다 .

@param{ ErrorConstructor } constructor
@param{ String | RegExp } expectederror message
@param{ String } message _optional_

귀하의 예에서 다음 중 하나를 사용할 수 있어야합니다.

expect(iThrowError).to.throw(/Error thrown/);
expect(iThrowError).to.throw(Error, /Error thrown/);
expect(iThrowError).to.throw(new Error('Error thrown'));

그리고 (다시 chai의 문서에서) 다음을 사용하여 다른 오류 메시지를 필터링 할 수 있습니다.

expect(iThrowError).to.throw(Error).and.not.throw(/Another Error thrown/);

도움이 되었기를 바랍니다!

참고URL : https://stackoverflow.com/questions/14966821/testing-for-errors-thrown-in-mocha

반응형