web-dev-qa-db-ja.com

JavaScriptの“ assert”とは何ですか?

JavaScriptでassertはどういう意味ですか?

次のようなものを見ました。

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

そしてassert()メソッドが何をするのか知りたいのですが。

251
frrlod

JavaScriptにはassertはありません(まだ; 1を追加するという話はありますが 、初期段階です)。おそらくそれを提供するライブラリを使っているのでしょう。通常の意味は、関数に渡された式がfalseの場合にエラーをスローすることです。これは アサーションチェック の一般的な概念の一部です。通常、アサーションは(呼ばれているとおりに)「テスト」または「デバッグ」ビルドでのみ使用され、プロダクションコードから取り除かれます。

常に文字列を受け入れると想定されている関数があるとします。誰かがその関数を文字列ではないもので呼び出したかどうかを知りたいでしょう。だからあなたがするかもしれません:

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

...条件が偽の場合、assertはエラーをスローします。

非常に単純なバージョンはこのようになります。

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

さらに良いことに、JavaScriptエンジンがそれをサポートしていればErrorオブジェクトを使用してください(本当に古いものはサポートしていないかもしれません)、これはスタックトレースを集めるという利点があります。

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

IE8でもErrorを持っています(ただしstackプロパティは持っていませんが、現代のエンジン(現代のIEを含む)は持っています)。

346
T.J. Crowder

最新のブラウザまたはnodejsを使用している場合は、console.assert(expression, object)を使用できます。

詳細については:

150
joaoprib

他の答えは良いです:ECMAScript 5に組み込まれたassert関数(例えば、基本的にどこでも動作する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
27
iX3

assert()はネイティブのJavaScript関数ではありません。それは誰かが作ったカスタム機能です。あなたはそれをあなたのページ上またはあなたのファイル内で探し、それが何をしているのかを判断するのを助けるために誰かのためにそれを投稿しなければならないでしょう。

8
Crayon Violent

これを確認してください。 http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-quick-and-easy-javascript-testing-with-assert/

javaScriptをテストするためのものです。驚くべきことに、わずか5〜6行で、このコードはテスト時にあなたのコードを強力に制御します。

Assert関数は2つのパラメータを受け取ります。

結果:ブール値。テストが成功したか失敗したかを参照します。

説明:テストの簡単な説明。

Assert関数は単純にリスト項目を作成し、テストがtrueまたはfalseを返したかどうかに応じて「合格」または「不合格」のいずれかのクラスを適用して、リスト項目に説明を追加します。最後に、そのブロックのコードがページに追加されます。それは狂気の単純ですが、完璧に動作します。

5
Amrendra

これはassert関数のとても簡単な実装です。それはあなたがテストしているものの価値と説明を取ります。

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

値がtrueと評価された場合は合格です。

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

それが偽を返すなら、それは失敗します。

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

アサーションが偽の場合、メッセージが表示されます。具体的には、最初の引数がfalseの場合、2番目の引数(文字列メッセージ)は開発者ツールのコンソールに記録されます。最初の引数が正しい場合、基本的に何も起こりません。簡単な例 - Google Developer Toolsを使用しています。

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.');
4
Crazy Cat

おそらくあなたのコードのいくつかが使っているテスト用ライブラリが付属しています。これがその一例です(たぶんあなたのコードが使っているのと同じライブラリではないかもしれませんが、それは一般的な考えを示しています):

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

3
Matt Browne

単語や関数 "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/

助けになれば幸いです。

2
Pavel

console.assert または のように他のオプションを追加する不変式 を使用できます。それはいくつかのユニークな特徴を持っています:

  • フォーマットされたエラーメッセージをサポートします(%s指定子を使用)。
  • プロダクション環境(Node.jsまたはWebpack環境によって決定される)では、エラーメッセージはオプションであり、(わずかに)小さい.jsが可能です。
1
Josh Kelley

これまでの答えはパフォーマンスと互換性の面で改善することができます。

Errorオブジェクトが存在する場合はを1回チェックし、宣言されていない場合は

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関数の行は表示されますが、デバッグには役立ちません。

1
Karl.S

Webpackを使っているのなら、 node.jsアサーションライブラリ を使うだけです。彼らは「汎用のアサーションライブラリを意図していない」と主張していますが、アドホックなアサーションでは大したことではないと思われます。

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

これを使用できるようにするにはwebpackまたはbrowserifyを使用する必要があるので、明らかにこれはそれらがすでにワークフローにある場合にのみ有用です。

1
amoe

T.J.が述べたように、JavaScriptにはassertはありません。ただし、 assert という名前のノードモジュールがあります。これは、 のテストに主に使用されます。だから、あなたは次のようなコードを見るかもしれません:

const assert = require('assert');
assert(5 > 7);
0
yuval.bl