2014-12-10 1 views
2

Согласно answer, я могу использовать форму ожидания с помощью .огурец: RSpec :: Ожидания :: ОжиданиеNotMetError: ожидается, что true для ответа на `true?`

value = true 
expect(value).to be_a(TrueClass) # => true 

, но если я использую #be_true метод, который он отказался отвечать за исключением:

expect(true).to be_true # => RSpec::Expectations::ExpectationNotMetError: expected true to respond to `true?` 

Так что я не могу использовать метод, как я использовал его в rails, но без rails себе. Итак, вопрос в том, как я могу добавить методы, не включая rails, и не определять их вручную?

+1

use 'be_truthy 'вместо' be_true' –

+0

@ Зелёный, но в rails я использовал exatly 'be_true' =) –

+0

https://github.com/rspec/rspec-expectations/issues/283 –

ответ

1

Попробуйте так:

expect(true).to be true 

Хотя документация RSpec указывает be_true будет проходить, если объект не nil или false, на практике я считаю, это не проходит, если объект true. Если вы хотите, чтобы проверить, что значение true конкретно, а не просто truthy значение, вам нужно использовать be true, (с пространством), eql true, eq true, equal true и т.д.

(Если вы еще не знакомый, вы можете прочитать о различии между совпадениями соответствия RSpec here. Вы не говорите, какую версию RSpec вы используете, так что это относится к 3.2, и я считаю, что это то же самое для других версий.)

+1

Это также требует изменения кода. Я считаю, что лучше использовать be_truthy –

+0

Oh! Спасибо, что указали это. В таком случае, да, если вы ищете какую-либо правдивую ценность, тогда 'be_truthy' лучше. –