2011-01-17 7 views
0

私はJavascriptでアサートメソッドを作成しようとしています。私はarguments.callee.callerと友人としばらくの間闘ってきましたが、呼び出し関数の完全なテキストを確実に取得し、そのテキスト内で現在の関数と一致するものを見つける方法を見つけることができません。評価の前に引数式を取得する

私はこのように私の機能を使用できるようにしたい:

var four = 5; 
function calculate4() { return 6; } 

assert(4 == 2 + 3); 
assert(4 == four);  
assert(4 == calculate4()); 
assert(4 != 3 && 2 < 1) 

と、このような出力が得られます。

アサーション4 == 2 + 3に失敗しました。 アサーション4 == 4が失敗しました。 アサーション4 == calculate4()に失敗しました。私は余分なパラメータを渡して避けるしたい

非常に有用ではありません アサーション4!=今&& 2

3は、私がずっとAssertion false failed.を超えて取得することはできません...(などthisをなど)なぜなら、アサーションコードを可能な限りきれいに保つことと、それが何度も何度もタイプされるからです。私はそれを文字列にするのは気にしませんが、その文字列をeval()しようとするとスコープの問題が心配です。私に他の選択肢がない場合、または私の懸念が悪い場合は、そう言いなさい。

私はこれをWindows上の.htaアプリケーションで実行していますので、実際はjscriptなので、ファイルシステムやActiveXなどにフルアクセスできるので、システム固有の解決策が得られます(Firebugなどは不要です)。 )。しかし、私は一般的な解決法を好むだろう。

答えて

1

これを行うには、単一の引数だけを渡すことはできません。 evalであっても、使用される変数は範囲外です。 arguments.callerの解析では、assertを1回だけコールした場合は、それを検索して引数式を解析することで、arguments.callerが1回だけコールされた場合に動作します。残念ながら、利用可能な独自のツールはどれも役に立ちません。

+0

私の不安を確認していただきありがとうございます。私はこれを数時間長くするつもりです、誰もより良い解決策を持っていなければ、私はそれを受け入れます。 –

+0

@reem:心配する必要はありません:-)最近Internet Explorerのコンソールアプリケーションを作成していたので、このようなことは役に立たなかったでしょう。 –

0

次の関数を使用すると、アサーションのテキストを2番目の引数として複製することができます。それは最も単純なようだった。

function assert(expression, message) 
{ 
    if (!expression) { 
     if (message + "" != "undefined" && message + "" != "") { 
      document.write("<h2>Assertion <pre>" + 
          message + 
          "</pre> failed.</h2><br>"); 
     } else { 
      document.write("<h2>Assertion failed.</h2><br>"); 
     } 
    } 
} 

多分それは誰かを助けます。おそらくより良い方法がありますが、これは私のために働いていました。

私は3日間Javascriptでしかプログラミングしていないことに注意してください。多分、改善がいくつかあります。

0

少なくともブラウザとNode.jsでは、実際には可能です。私は.htaアプリケーションについて知らない。

現代のブラウザNode.js とうまくいけば、は、スタックトレースを含むエラーオブジェクトにstack propertyを入れます。新しいエラーを作成し、assert()呼び出しを含むファイルへのファイルパス、および呼び出しの行番号と列番号(使用可能な場合)を解析できます。次に、ソースファイルを読み、与えられた位置のassert式を切り捨てます。

  1. filepathlineNumbercolumnNumber
  2. file
lineNumbercolumnNumberの近くにしたいビットを切り取り filepath
  • fileを読む取得するには、error
  • 解析error.stackを構築

    私はそのようなアサーションfあなたが行くかもしれないyabaと呼ばれる、

  • 関連する問題