2013-02-03 9 views
26

をtoBeUndefined、変数がundefinedであるかどうかをチェックでき.not.toBeDefined()または.toBeUndefined()マッチを使用して仮定しましたそれらのマッチ、それはしません。私はちょうどこれらの間違いを使用していますか、または何かがundefinedであるかどうか確認するための仕様を書くことはできませんか?ジャスミンは、私はジャスミンに新たなんだ

+0

このエラーは、定義されていない変数にアクセスしているので、本質的にスローするecmasceiptエンジンによって決まります。ジャスミンのせいではないので、これは完全に期待されています。それが言語の振る舞いです。 – Reece

答えて

36

問題は、ジャスミンの呼び出しもを発生する前に

expect(obj).toBeUndefined(); 

を失敗したということです。定義されていない変数を参照するのは間違いです(新しいブラウザや "厳密な"モードでは少なくとも)。

ではなく、この設定をお試しください:そのコードで

it('should not be defined using .tobeUnefined()', function() { 
    var obj = {}; 
    expect(obj.not_defined).toBeUndefined(); 
}); 

は、その値が空のオブジェクトである変数「OBJ」があります。 JavaScriptでは、オブジェクトの存在しないプロパティを参照するのは問題ありません。このような参照の結果はundefinedになるため、テストに合格します。

it('should not be defined using .tobeUnefined()', function() { 
    var no_value; 

    expect(no_value).toBeUndefined(); 
}); 
+0

洞察に感謝します。 :) –

+17

あなたは次のようにすることもできます: 'expect(typeof obj).toBe( 'undefined')' –

+0

ありがとう、今私はこの動作を得ることができます:describe( "A girl"、function(){ it "、function(){ expect({}。arya).toBeUndefined(); }) }); – Seanonymous

4

obj is not definedというエラーが表示されることに注意してください。

objがであるとは限りません。です。

未定義は、実際にはJavaScriptのデータ型です。

割り当てのない宣言された変数には、既定での値が定義されていません。が宣言されていなければなりません。

したがって、値がであるかどうかをテストするときは、と定義されています。obj === undefinedであるかどうかを判断しています。

あなたは

var obj; 

を宣言した場合、objは未定義テストします。

objを宣言していない場合は、ジャスミンマッチャーがのデータ型と比較されるものは何もありません。です。

関連する問題