Как избежать "бесполезного использования == в пустотном контексте" в RSpec?

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

x.should == 42
another_line_of_code

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

warning: useless use of == in void context

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

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

Ответы

Ответ 1

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

Ответ 2

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

actual.should eq(expected) 

Ответ 3

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

x.should eq(42)

Или:

x.should be == 42

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


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

Я полный noob для Ruby, но вот мое понимание:

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

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

> irb -w

def example
  1 == 1
  :hello
end

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

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