this chaiを使用して、angularjsアプリをテストするチュートリアルに基づいて、「should」スタイルを使用して未定義の値のテストを追加します。これは失敗します:
it ('cannot play outside the board', function() {
scope.play(10).should.be.undefined;
});
「TypeError:未定義のプロパティ「should」を読み取れません」というエラーが表示されますが、テストは「expect」スタイルで合格します。
it ('cannot play outside the board', function() {
chai.expect(scope.play(10)).to.be.undefined;
});
「should」で動作させるにはどうすればよいですか?
これはshould構文の欠点の1つです。 shouldプロパティをすべてのオブジェクトに追加することで機能しますが、戻り値または変数値が未定義の場合、プロパティを保持するオブジェクトはありません。
documentation は、次のような回避策を提供します。
var should = require('chai').should();
db.get(1234, function (err, doc) {
should.not.exist(err);
should.exist(doc);
doc.should.be.an('object');
});
should.equal(testedValue, undefined);
chaiのドキュメントに記載されているとおり
未定義のテスト
var should = require('should');
...
should(scope.play(10)).be.undefined;
ヌルのテスト
var should = require('should');
...
should(scope.play(10)).be.null;
虚偽のテスト、つまり条件で偽として扱われる
var should = require('should');
...
should(scope.play(10)).not.be.ok;
(typeof scope.play(10)).should.equal('undefined');
未定義のテストのshouldステートメントを書くのに苦労しました。以下は機能しません。
target.should.be.undefined();
私は次の解決策を見つけました。
(target === undefined).should.be.true()
型チェックとして書くこともできれば
(typeof target).should.be.equal('undefined');
上記が正しい方法かどうかはわかりませんが、機能します。
これを試して:
it ('cannot play outside the board', function() {
expect(scope.play(10)).to.be.undefined; // undefined
expect(scope.play(10)).to.not.be.undefined; // or not
});
@ david-normanによる答えは、ドキュメントによると正しいです。セットアップにいくつかの問題があり、代わりに以下を選択しました。
(typeof scope.play(10))。should.be.undefined;
have
キーワードとnot
キーワードの組み合わせを忘れないでください:
const chai = require('chai');
chai.should();
// ...
userData.should.not.have.property('passwordHash');
関数の結果をshould()
でラップし、「未定義」のタイプをテストできます。
it ('cannot play outside the board', function() {
should(scope.play(10)).be.type('undefined');
});