Есть несколько проблем:
Вызов метода instance_method с аргументом, который не используется
def letter_count #get rid of argument, the argument does nothing,
#basically it looks you added the argument,
# just, so you can call the other method there.
Сделайте ваш основной простой, с помощьючеткая последовательность
res.inputstr
res.letter_count
Но по поводу вашего фактического вопроса, в своем тесте вы меняете неправильную вещь неправильным методом
allow(subject.letter_count("hello").to receive(:result).and_return(5)
# letter count should do the log entry, not return five, at least that what your method say
Так что вы, вероятно, хотитеустановить @str перед проверкой метода letter_count.
subject.instance_variable_set("hello")
# then test for what you expect the method to return
expect(subject.letter_count).to eq(5)
# this specific test will fail, because you are doing a log entry, and not return the length on letter_count.