2011-06-17 17 views
1

私はQUnitで簡単なテストをしようとしていますが、何らかの理由で自分の機能が見つからない場合があります。根本的に何かしているのですか?QUnit:機能が定義されていません

test.htmlという

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
     "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
    <title></title> 
    <script type="text/javascript" src="qunit-git.js"></script> 
    <script type="text/javascript" src="jquery.min.js"></script> 
    <script type="text/javascript" src="code.js"></script> 
    <script type="text/javascript" src="test.js"></script> 
    <link rel="stylesheet" type="text/css" href="qunit-git.css" media="screen"/> 
</head> 
<body> 
<h1 id="qunit-header">QUnit Test Suite</h1> 
<h2 id="qunit-banner"></h2> 
<div id="qunit-testrunner-toolbar"></div> 
<h2 id="qunit-userAgent"></h2> 
<ol id="qunit-tests"></ol> 
</body> 
</html> 

test.js

test('Blah blah', function() { 
    ok(mytest(), 'foo bar' 
); 
}); 

code.js

$(document).ready(function() { 
    var mytest = function() { 
    return true; 
    } 
}); 

- > "は、テスト#1に死亡:MyTestには定義されていません..."

答えて

3

mytest()ready()関数内で宣言、ひいては関数スコープを持っています。したがって、ready機能の外部からはアクセスできません。あなたのテストはグローバルスコープを持っていると仮定します。

ブロックスコープで宣言された変数と関数は、最も近い関数スコープの先頭に「ホイスト」され、関数内で宣言されていない場合はグローバルスコープに渡されます。

EDIT

最終的に、私は、コードが間違って構成されていると言うでしょう。レディ機能は、ドキュメントの準備ができたときに実行するだけのものを実行するためのものです。

より厳密に型指定された言語を考えます。 Page.Load()またはWindow.Load()またはApplication.Init()に機能をスコープしますか。いいえ、クラスレベルで宣言し、そのようにアクセスします。

このようにしてJavaScriptコードを考えます。スコープを縮小する場合は、別のクラス内で宣言してください。

+0

はい、その場合、ready()の中で宣言された関数をどのようにテストするのですか? –

+0

できません。それらを外に出す。上記の私の編集を参照してください。 –

関連する問題