web-dev-qa-db-ja.com

チャイ:「should」構文で未定義をテストする方法

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」で動作させるにはどうすればよいですか?

91
thebenedict

これは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');
});
75
David Norman
should.equal(testedValue, undefined);

chaiのドキュメントに記載されているとおり

46
daniel

未定義のテスト

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;
17
Peter Dotchev
(typeof scope.play(10)).should.equal('undefined');
16
teddychan

未定義のテストのshouldステートメントを書くのに苦労しました。以下は機能しません。

target.should.be.undefined();

私は次の解決策を見つけました。

(target === undefined).should.be.true()

型チェックとして書くこともできれば

(typeof target).should.be.equal('undefined');

上記が正しい方法かどうかはわかりませんが、機能します。

githubのゴーストからの投稿による

7
Viraths

これを試して:

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
});
5
EpokK

@ david-normanによる答えは、ドキュメントによると正しいです。セットアップにいくつかの問題があり、代わりに以下を選択しました。

(typeof scope.play(10))。should.be.undefined;

1
Andy Polhill

haveキーワードとnotキーワードの組み合わせを忘れないでください:

const chai = require('chai');
chai.should();
// ...
userData.should.not.have.property('passwordHash');
1
Yarovoy

関数の結果をshould()でラップし、「未定義」のタイプをテストできます。

it ('cannot play outside the board', function() {
  should(scope.play(10)).be.type('undefined');
});
0
pegli