type holyshared = Engineer<mixed>

PHP、Hack、Ruby、OCaml、Javascript周りの技術ブログ

いつから俺は、be_truthy/be_falseyの仕様を勘違いしていたのだ

PHPexpectationライブラリ作っているのですが、思いっきり間違った実装をしていることに、rspecのリファレンスを見ていて、気がつきました。

matcherのtoBeTruthy/toBeFalseyが、rspecのmatcherでは、

  • be_truthy - nil、若しくはfalseでない
  • be_falsey - nil、若しくはfalse

なんですね。 自分はずっと、be_true / be_falseのエイリアスだと思っていた...。

リファレンスをみるとちゃんと書いてある。

    expect(actual).to be_truthy    # passes if actual is truthy (not nil or false)
    expect(actual).to be_falsey    # passes if actual is falsy (nil or false)

というわけで、バージョン1.4.3で修正しました。
古いバージョンでは、toBeTruthy/toBeFalseyが、toBeTrue/toBeFalseと等価の振る舞いになっています。