web-dev-qa-db-ja.com

Chai.shouldで何かが関数であるかどうかをテストする方法

Chai.shouldで何かが関数かどうかを確認したい。だから私はしました

typeof(barfoo).should.equals('function')

[〜#〜]デモ[〜#〜]

これにより、

AssertionError: expected [Function] to equal 'function'
    at Context.<anonymous> (:73:31)

誰かが私にこれがうまくいかない理由を説明できますか?

typeof(barfoo)

文字列functionを取得します。これはinstanceOfで解決しましたが、本当に理解したいです

13

追加の括弧が必要です

(typeof(barfoo)).should.equals('function')

それ以外の場合、式は次のように解釈されます。

typeof ((barfoo).should.equals('function'))

ご覧のとおり、.shouldではなくbarfootypeof barfooを呼び出してから、最終結果のタイプを取得して破棄します。

これは、typeofが関数ではなく、単項演算子であるためです [1] およびメンバーアクセス演算子(.)および関数呼び出しよりも優先順位が低くなります [2] 。したがって、typeofはこの式の最後に評価されます。

8
Bryan Chen

barfooが関数であるかどうかを確認する方法は次のとおりです。

barfoo.should.be.a('function');
29
Do Async

InstanceOfでテストすることも可能です:

barfoo.should.be.instanceOf(Function);
2
Eugene Tsakh