development

JavaScript에서 "어설 션"이란 무엇입니까?

big-blog 2020. 4. 2. 08:15
반응형

JavaScript에서 "어설 션"이란 무엇입니까?


assertJavaScript에서 무엇을 의미합니까?

나는 다음과 같은 것을 보았다 :

assert(function1() && function2() && function3(), "some text");

그리고 그 방법 assert()무엇인지 알고 싶습니다 .


assertJavaScript 에는 없습니다 (아직 추가하는 것에 대한 이야기가 있지만 초기 단계입니다). 아마도 하나를 제공하는 라이브러리를 사용하고있을 것입니다. 일반적인 의미는 함수에 전달 된 표현식이 false 인 경우 오류를 발생시키는 것입니다. 이것은 어설 션 검사 의 일반적인 개념의 일부입니다 . 일반적으로 어설 션은 "테스트"또는 "디버그"빌드에서만 사용되며 프로덕션 코드에서 제거됩니다.

항상 문자열을 받아 들여야하는 함수가 있다고 가정하십시오 . 누군가가 문자열이 아닌 것을 사용하여 해당 함수를 호출했는지 알고 싶습니다. 그래서 당신은 할 수 있습니다 :

assert(typeof argumentName === "string");

... assert조건이 거짓이면 오류가 발생합니다.

매우 간단한 버전은 다음과 같습니다.

function assert(condition, message) {
    if (!condition) {
        throw message || "Assertion failed";
    }
}

ErrorJavaScript 엔진 객체를 지원하는 경우 (실제로는 오래된 것이 아닐 수도 있음) 객체를 사용하는 것이 더 좋습니다 . 스택 추적 등을 수집하는 이점이 있습니다.

function assert(condition, message) {
    if (!condition) {
        message = message || "Assertion failed";
        if (typeof Error !== "undefined") {
            throw new Error(message);
        }
        throw message; // Fallback
    }
}

IE8조차도 Error( stack속성이 없지만 현대 엔진을 포함한 최신 엔진은 가지고 있음).


최신 브라우저 또는 nodejs를 사용하는 경우을 사용할 수 있습니다 console.assert(expression, object).

자세한 내용은:


다른 대답은 좋습니다. ECMAScript5에 내장 된 어설 션 함수 (예 : 기본적으로 모든 곳에서 작동하는 JavaScript)는 없지만 일부 브라우저는이 기능을 제공하거나 추가 기능을 제공합니다. 이를 위해 잘 확립 된 / 인기있는 / 유지 관리되는 라이브러리를 사용하는 것이 가장 좋지만 학문적 목적으로 "가난한 사람의 주장"기능은 다음과 같습니다.

const assert = function(condition, message) {
    if (!condition)
        throw Error('Assert failed: ' + (message || ''));
};

assert(1 === 1); // Executes without problem
assert(false, 'Expected true');
// Yields 'Error: Assert failed: Expected true' in console

assert()네이티브 자바 스크립트 함수가 아닙니다. 누군가가 만든 맞춤형 기능입니다. 페이지 나 파일에서 해당 파일을 찾아서 누군가가 수행중인 작업을 판별 할 수 있도록 게시해야합니다.


이것을 확인하십시오 : http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-quick-and-easy-javascript-testing-with-assert/

JavaScript를 테스트하기위한 것입니다. 놀랍게도,이 코드는 5-6 줄에 불과하지만 테스트 할 때 코드를 강력하게 제어하고 제어 할 수 있습니다.

assert 함수는 두 가지 매개 변수를 허용합니다.

결과 : 테스트가 통과했는지 실패했는지를 나타내는 부울

설명 : 테스트에 대한 간단한 설명입니다.

assert 함수는 단순히 목록 항목을 생성하고 테스트가 true 또는 false를 반환했는지 여부에 따라 "통과"또는 "실패"클래스를 적용한 다음 설명을 목록 항목에 추가합니다. 마지막으로, 해당 코드 블록이 페이지에 추가됩니다. 간단하지만 완벽하게 작동합니다.


여기에 assert 함수의 간단한 구현이 있습니다. 테스트하고있는 것에 대한 가치와 설명이 필요합니다.

 function assert(value, description) {
        var result = value ? "pass" : "fail";
        console.log(result + ' - ' +  description); 
    };

값이 true로 평가되면 전달됩니다.

assert (1===1, 'testing if 1=1');  

false를 반환하면 실패합니다.

assert (1===2, 'testing if 1=1');

어설 션이 false이면 메시지가 표시됩니다. 특히 첫 번째 인수가 false이면 두 번째 인수 (문자열 메시지)가 개발자 도구 콘솔에 기록됩니다. 첫 번째 인수가 참이면 기본적으로 아무 일도 일어나지 않습니다. 간단한 예 – Google 개발자 도구를 사용하고 있습니다.

var isTrue = true;
var isFalse = false;
console.assert(isTrue, 'Equals true so will NOT log to the console.');
console.assert(isFalse, 'Equals false so WILL log to the console.');

아마도 일부 코드에서 사용하는 테스트 라이브러리가 제공되었을 것입니다. 다음은 하나의 예입니다 (코드가 사용하는 라이브러리와 동일하지는 않지만 일반적인 아이디어를 보여줍니다).

http://chaijs.com/guide/styles/#assert


단어 또는 기능 "어설 션"은 주로 응용 프로그램 부분을 테스트하는 데 사용됩니다.

어설 션 함수는 프로그램에 조건 ( "어설 션"이라고도 함)을 확인하도록 지시하는 짧은 방법이며 조건이 True가 아닌 경우 오류가 발생합니다.

"일반 코드"에서 어떻게 보이는지 봅시다

if (typeof "string" === "array") { throw Error('Error: "string" !== "array"'); }

assert간단히 쓸 수 있습니다 :

assert(typeof "string" === "array")

Javascript에는 기본 assert기능이 없으므로 일부 라이브러리의 기능을 사용해야합니다.

간단한 소개를 위해이 기사를 확인할 수 있습니다.

http://fredkschott.com/post/2014/05/nodejs-testing-essentials/

도움이 되길 바랍니다.


성능 및 호환성 측면에서 이전 답변을 개선 할 수 있습니다.

객체가 존재 하는지 여부를 한 번 확인하십시오 ( Error선언하지 않은 경우).

if (typeof Error === "undefined") {
    Error = function(message) {
        this.message = message;
    };
    Error.prototype.message = "";
}

그런 다음 각 어설 션은 조건을 확인하고 항상Error 개체를 던집니다.

function assert(condition, message) {
    if (!condition) throw new Error(message || "Assertion failed");
}

콘솔은 실제 오류 줄 번호를 표시하지 않지만 assert함수 줄을 표시하므로 디버깅에 유용하지 않습니다.


webpack을 사용하는 경우 node.js 어설 션 라이브러리 만 사용할 수 있습니다 . 그들은 그것이 "범용 어설 션 라이브러리가 아니라"고 주장하지만, 어설 션 어설 션에는 괜찮을 것 같고 어쨌든 노드 공간에 경쟁자가 존재하지 않는 것 같습니다 (카이는 유닛 테스트를 위해 설계되었습니다).

const assert = require('assert');
...
assert(jqXHR.status == 201, "create response should be 201");

이를 사용하려면 webpack 또는 browserify를 사용해야하므로 분명히 워크 플로우에있는 경우에만 유용합니다.


console.assert 또는 롤링 과 같은 다른 옵션 외에도 불변 을 사용할 수 있습니다 . 몇 가지 고유 한 기능이 있습니다.

  • 형식 %s지정자를 사용하여 형식화 된 오류 메시지를 지원합니다 .
  • 프로덕션 환경 (Node.js 또는 Webpack 환경에 의해 결정됨)에서 오류 메시지는 선택 사항이므로 (약간) 작은 .js를 허용합니다.

TJ에서 언급했듯이 assertJavaScript 에는 없습니다 . 그러나 assert 라는 노드 모듈이 있는데, 주로 테스트에 사용됩니다 . 따라서 다음과 같은 코드가 표시 될 수 있습니다.

const assert = require('assert');
assert(5 > 7);

참고 URL : https://stackoverflow.com/questions/15313418/what-is-assert-in-javascript

반응형