2015-05-19 2 views
0

Любая идея, почему следующий код не работает?Minitest :: Mock и case case

require 'minitest/mock' 

test = Minitest::Mock.new 
test.expect :class, Class 

p case test 
when Class 
    'class' 
else 
    'nope' 
end # => 'nope' … but should return 'class' 

p test.class === Class # => true 
+0

не должен ли это '' case text.class''? –

+0

Ruby 'case' обрабатывает сравнение' === 'без явного вызова' class', хотя при явном сравнении результата 'test.class' этот код работает. –

+0

Проблема в том, что оператор case находится в классе, к которому у меня нет доступа. –

ответ

1

Рубин case обрабатывает === сравнение без явного вызова class, хотя делает явное сравнение на результат test.class делает вышеприведенный код будет работать.

Если вы не можете этого сделать, как вы сказали выше, возможно, вы не сможете получить case, как это работает. Я предполагаю, что реализация Ruby case реализована на C, поэтому class, вероятно, никогда не будет называться и ожидание никогда не будет удовлетворено.