29

私はJasmineを初めて使用し、変数が次のとおりであるかどうかを確認できる.not.toBeDefined()or.toBeUndefined()一致を使用すると想定しています。undefined

describe('toBeDefined', function() {

    it('should be defined', function() {
        var obj = {};
        expect(obj).toBeDefined(); // Passes
    });

    it('should not be defined using .not.tobeDefined()', function() {
        //var obj = {};
        expect(obj).not.toBeDefined(); // Fails // ReferenceError: obj is not defined
    });

    it('should not be defined using .tobeUnefined()', function() {
        //var obj = {};
        expect(obj).toBeUndefined(); // Fails // ReferenceError: obj is not defined
    });

});

これはコード内で失敗することは完全にわかりますが、これらの一致を使用すると想定しましたが、失敗しませんでした。私はこれらを間違って使用しているだけですか、それとも何かが正しいかどうかを確認するための仕様を書くことはできませんundefinedか?

4

2 に答える 2

43

問題はそれです

  expect(obj).toBeUndefined();

Jasmine への呼び出しが発生する前に失敗します。定義されていない変数を参照するのは誤りです (少なくとも新しいブラウザーまたは「厳格な」モードでは)。

代わりにこの設定を試してください:

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();
});
于 2013-02-03T19:22:27.393 に答える