2014-10-16 1 views
0

Я читаю учебник RoT Hartl, а в тесте rspec есть блок, чтобы проверить, совпадают ли пароли. В этом блоке находится эта строка:Когда Rspec true! = True?

 expect(@user.has_password?(@attr[:password])).to be_true 

, который терпит неудачу. Но я знаю, что код работает, потому что, если я положил строку:

puts @user.has_password?(@attr[:password]) 

В блоке он выводит «true». Что действительно бросает меня в том, что я поставил линию:

 expect(true).to be_true 

вместо строки выше ... и тест все еще не. Что с этим?

+0

Не знаю, почему он терпит неудачу, но попробуйте 'ожидать (true). Быть истинным' (без подчеркивания) и посмотреть, изменится ли результат. – makhan

ответ

0

Кажется be_true было переименовано в be_truthy. Попробуйте один из этих вариантов:

expect(true).to be true 
expect(true).to be_truthy 

Первый будет работать только для true. Второй для всего, что не является false или nil.

+0

Спасибо, я тестировал варианты: ожидать (правда) .то be_true # не удается ожидать (правда) .то be_truthy # проходит ожидать (правда) .чтобы быть правдой # проходит ожидать (правда) .чтобы быть truthy # неопределенными местного переменная или метод 'правша ' Также наткнулся на эту страницу: http://www.bengribaudo.com/blog/2014/01/17/2674/rspec-be-true-be_true-are-different –

+0

Действительно,' be_true 'был [устарел] (https://github.com/rspec/rspec-expectations/issues/283) в rspec3. – orde