Как мне избежать «Бесполезного использования == в пустом контексте» в RSpec? - PullRequest
14 голосов
/ 05 сентября 2010

В RSpec, если у меня есть предупреждения и есть

x.should == 42
another_line_of_code

тогда я получаю предупреждение о

warning: useless use of == in void context

Могу ли я что-нибудь сделать, кроме

  1. Отключить предупреждения
  2. Измените его на bitbucket = (x.should == 42)

Ответы [ 3 ]

23 голосов
/ 02 июля 2012

Использование:

x.should eq(42)

Или:

x.should be == 42

Или переместите x.should == 42 так, чтобы это была последняя строка внутри блока it .


Для тех, кто думает НО ПОЧЕМУ?

Я полный нуб к Руби, но вот мое понимание:

Предупреждение приходит от Ruby, так как операторы типа x.should == 42 или 1 == 1 возвращают значение. Если это возвращаемое значение фактически не используется (например, присвоено переменной, используется в качестве аргумента функции или возвращено из блока), то Ruby по понятным причинам не видит смысла в использовании оператора в первую очередь и предупреждает вас об этом.

Чтобы проверить это, вы можете запустить irb с флагом -w и добавить следующий код:

> irb -w

def example
  1 == 1
  :hello
end

1 == 1 должен выдавать предупреждение о бесполезном == в пустом контексте. Попробуйте это без строки: hello, и вы не получите предупреждение, так как 1 == 1 будет использоваться в качестве оператора возврата.

Я знаю, что Оп и другие здесь уже поняли это. Однако я хотел опубликовать это для таких людей, как я, которые могут задаться вопросом, почему было выдано предупреждение и почему предложенные решения решили эту проблему.

21 голосов
/ 05 сентября 2010

RSpec-2 имеет eq(expected) сопоставитель, который работает так же, как == без предупреждения:

actual.should eq(expected) 
7 голосов
/ 23 июня 2011

Вы также можете использовать actual.should be == expected. Это просто зависит от того, что вы думаете, выглядит красивее!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...