답변:
assert
JavaScript 에는 없습니다 (아직 추가하는 것에 대한 이야기가 있지만 초기 단계입니다). 아마도 하나를 제공하는 라이브러리를 사용하고있을 것입니다. 일반적인 의미는 함수에 전달 된 표현식이 false 인 경우 오류를 발생시키는 것입니다. 이것은 어설 션 검사 의 일반적인 개념의 일부입니다 . 일반적으로 어설 션은 "테스트"또는 "디버그"빌드에서만 사용되며 프로덕션 코드에서 제거됩니다.
항상 문자열을 받아 들여야하는 함수가 있다고 가정하십시오 . 누군가가 문자열이 아닌 것을 사용하여 해당 함수를 호출했는지 알고 싶습니다. 그래서 당신은 할 수 있습니다 :
assert(typeof argumentName === "string");
... assert
조건이 거짓이면 오류가 발생합니다.
매우 간단한 버전은 다음과 같습니다.
function assert(condition, message) {
if (!condition) {
throw message || "Assertion failed";
}
}
Error
JavaScript 엔진이 지원하는 경우 (실제로 오래된 것이 아닐 수도 있음) 객체를 사용 하면 스택 추적 등을 수집 할 수있는 이점이 있습니다.
function assert(condition, message) {
if (!condition) {
message = message || "Assertion failed";
if (typeof Error !== "undefined") {
throw new Error(message);
}
throw message; // Fallback
}
}
IE8조차도 Error
( stack
속성이 없지만 현대 엔진을 포함한 최신 엔진이 있습니다).
if(!condition)
것은 설정 var throwError=true;
후 debugger;
던지기 섹션을에 묶습니다 if(throwError)
. 이렇게하면 디버거가 열려 있으면 중단되고 원하는 경우 throwError
false로 설정 하고 나갈 때 모든 범위를 검사 할 수 있습니다 .
throw
. 그렇게하면 debugger;
진술이 필요하지 않습니다 . 자세한 내용은 developer.chrome.com/devtools/docs/… 를 참조하십시오 .
if
. 조건 연산자 와 교환 했습니다. 어쨌든 오늘날의 세상에서 나는 엔진이없는 엔진을 지원하지 않아도 Error
됩니다.
최신 브라우저 또는 nodejs를 사용하는 경우을 사용할 수 있습니다 console.assert(expression, object)
.
자세한 내용은:
console.error
코드가 계속 실행되는 것과 더 유사 합니다.
console.assert
와 같은 동작이 없으면 그렇게 좋지 않습니다 throw
.
console.assert
는 어설 션이 오류 처리 기능이 아니기 때문입니다. 개발 중에 만 코드 정확성 검사를 위해 설계되었습니다. 일반적으로 사소한 이유로 인해 라이브 시스템이 종료되는 것을 피하기 위해 프로덕션 환경에서는 완전히 비활성화되어 있습니다. 브라우저는 프로덕션 환경으로 간주되므로 console.assert
실행을 종료하지 않습니다. 실행을 중지하기 위해 어설 션에 의존하는 경우 어설 션이 의도 한 것이 아니기 때문에 대신 적절한 오류 처리를 사용해야합니다.
다른 대답은 좋습니다. 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
try
, catch
, throw
)
이것을 확인하십시오 : 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.');
아마도 일부 코드에서 사용하는 테스트 라이브러리가 제공되었을 것입니다. 다음은 하나의 예입니다 (코드가 사용하는 라이브러리와 동일하지는 않지만 일반적인 아이디어를 보여줍니다).
단어 또는 기능 "어설 션"은 대부분 응용 프로그램의 테스트 부분에 사용됩니다.
어설 션 함수는 프로그램에 조건 ( "어설 션"이라고도 함)을 확인하도록 지시하는 짧은 방법이며 조건이 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/
도움이 되길 바랍니다.
첫 번째 특성이 false 인 경우 어설 션에서 오류 메시지가 발생하고 두 번째 특성이 throw 될 메시지입니다.
console.assert(condition,message);
어설 션은 JavaScript에는 존재하지 않지만 JavaScript console.assert()
에는 어설 션 기능 이라는 많은 의견이 있습니다. 어설 션 아이디어는 버그가 발생하는 이유 / 위치를 찾는 것입니다.
console.assert(document.getElementById("title"), "You have no element with ID 'title'");
console.assert(document.getElementById("image"), "You have no element with ID 'image'");
메시지에 따라 버그가 무엇인지 확인할 수 있습니다. 이 오류 메시지는 콘솔에서 console.error();
더 많은 기능을 보려면console.log(console);
성능과 호환성 측면에서 이전 답변을 개선 할 수 있습니다.
객체가 존재 하는지 여부를 한 번 확인하십시오 ( 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
지정자를 사용하여 형식화 된 오류 메시지를 지원합니다 .TJ에서 언급했듯이 assert
JavaScript 에는 없습니다 . 그러나 assert 라는 노드 모듈 이 있는데 주로 테스트에 사용됩니다 . 따라서 다음과 같은 코드가 표시 될 수 있습니다.
const assert = require('assert');
assert(5 > 7);
assert
.