24

RSpecを使用してAPIをテストしています。true1つの特定のエンドポイントがブール値またはのいずれかを返すように指定したいと思いますfalsefalseこれは他のシステムや言語で使用されるAPIであるため、Rubyが評価したり、評価したりするだけでなく、実際のブール値であることが重要ですtrue

Booleanしかし、Rubyにはタイプがないため、これを行う方法がわかりません。

4

7 に答える 7

36
expect(variable).to be_in([true, false])
于 2015-10-29T15:35:22.777 に答える
24

私も同じ問題を抱えていました。これは私が思いついたものです:

RSpec::Matchers.define :be_boolean do
  match do |actual|
    expect(actual).to be_in([true, false])
  end
end

参照:https ://www.relishapp.com/rspec/rspec-expectations/v/3-4/docs/custom-matchers

次のように使用できます。

it 'is boolean' do
  expect(true).to be_boolean
end
于 2014-03-26T09:05:36.477 に答える
16

最近のrspecバージョンでは、複合マッチャーを使用できます。

expect(thing).to be(true).or be(false)
于 2016-09-06T16:09:51.940 に答える
7

上記の組み合わせはどうですか?

RSpec::Matchers.define :be_boolean do
  match do |value|
    [true, false].include? value
  end
end

利用方法:

expect(something).to be_boolean
于 2016-06-13T15:22:44.473 に答える
2

RubyにはBooleanクラスがありませんが、 TrueClassFalseClassがあり、trueそのfalseうちの唯一のインスタンスです。私はあなたがそれらの2つのどちらかに対してテストすることができて、行ってもいいと確信しています。

true.is_a? TrueClass # => true
(1 == 1).is_a? TrueClass # => true
1.is_a? TrueClass # => false

false.is_a? FalseClass # => true
(1 == 2).is_a? FalseClass # => true
nil.is_a? FalseClass # => false
于 2012-11-14T01:17:15.287 に答える
2

それはかなり後のことですが、これが私が決めたものです:

foo.should satisfy {|x| [true, false].map(&:object_id).include? x.object_id}

trueとfalseにはインスタンスが1つしかないため、これは機能します。また、好奇心が強いですが、常に同じインスタンスIDを持っています。

于 2013-08-16T04:33:38.747 に答える
1

グループ:development、:test:のGemfileにgemrspec_booleanを追加します。

gem'rspec_boolean'

そしてそれを次のように使用するよりも:

expect(val.is_done).to be_boolean

于 2015-09-16T07:33:18.467 に答える