2015-11-23 2 views
-2

Rspec кодRspec ошибка в тестировании рубин кода

it "calls calculate_word_frequency when created" do 
    expect_any_instance_of(LineAnalyzer).to receive(:calculate_word_frequency) 
    LineAnalyzer.new("", 1) 
end 

Код класса

def initialize(content,line_number) 
@content = content 
@line_number = line_number 
end 

def calculate_word_frequency 
h = Hash.new(0) 
abc = @content.split(' ') 
abc.each { |word| h[word.downcase] += 1 } 

sort = h.sort_by {|_key, value| value}.reverse 
puts @highest_wf_count = sort.first[1] 

a = h.select{|key, hash| hash == @highest_wf_count } 
puts @highest_wf_words = a.keys 
end 

Этот тест дает ошибку

LineAnalyzer calls calculate_word_frequency when created Failure/Error: DEFAULT_FAILURE_NOTIFIER = lambda { |failure, _opts| raise failure } Exactly one instance should have received the following message(s) but didn't: calculate_word_frequency

Как решить эту error.How I пройти этот тест?

+0

Это не ошибка, это неудачный тест, который является полностью нормальной частью RSpec. – meagar

+0

Как я его передаю. –

+1

Исправьте свой код или свою спецификацию. Согласно вашей спецификации, во время инициализации следует вызывать 'calculate_work_frequency'. Независимо от того, правильное ли это поведение - мы понятия не имеем. –

ответ

2

Весь смысл этого теста заключается в том, чтобы конструктор вызывал метод. Это написано очень четко, очень прямолинейно.

Если вы хотите, чтобы тест прошел, измените конструктор так, чтобы он вызывал метод.

+0

Я не могу понять, как это пройти? –

+1

@HaseebAhmad Исправьте свой код или свою спецификацию. Согласно вашей спецификации, во время инициализации следует вызывать 'calculate_work_frequency'. Независимо от того, правильное ли это поведение - мы понятия не имеем. –

1

Я полагаю, вы спрашивали: «Почему я получаю это сообщение об ошибке?» а не «Почему моя спецификация не проходит?»

Причина, по которой вы получаете это сообщение об ошибке, заключается в том, что вы использовали expect_any_instance_of в своей спецификации, поэтому RSpec поднял ошибку в своем собственном коде, а не в вашем, по сути, потому что она достигла конца исполнения без исключения, но без вашего шпиона тоже называется. Важной частью сообщения об ошибке является следующее: Exactly one instance should have received the following message(s) but didn't: calculate_word_frequency. Вот почему ваша спецификация потерпела неудачу; это просто, что, по-видимому, RSpec решил дать вам гораздо менее полезное исключение и обратную связь.

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

Смежные вопросы