Моя самая слабость, когда дело доходит до кодирования, использует TDD & Методы BDD - я имею тенденцию просто писать код .. но это то, над чем я пытаюсь работать.Тестирование с помощью Rspec - Правильный способ
Можно ли указать, что лучший способ идти о следующей проблеме:
Class1:
module TempMod
class MyClass
def initalize(config)
@config = config
end
def process(xml)
if react_upon? xml.something
puts 'yeah'
else
puts 'nah'
end
end
def react_upon?(xml_code)
#code here
end
end
end
Так позволяет сказать, что я хотел проверить этот класс, или построить его с точки TDD зрения поэтому я пишу свои тесты:
describe TempMod::MyClass do
let(:config) {double}
let(:myclass) {TempMod::MyClass.new config}
context 'Given that the xml is something we react upon' do
it 'should check that it is valid' do
myclass.process '<some><xml>here</xml></some>'
end
it 'should output yea'
end
end
Как проверить, что он вызывает response_upon? метод. Я даже хочу видеть, что это называется?
Это правильный способ проверить его, чтобы проверить все функции, такие как response_upon? самостоятельно независимо от других функций?
Это как раз то, что меня больше всего сбивает с толку. Я тестирую весь класс или просто индивидуально тестирую функции, а не их взаимодействие с другими функциями этого класса?
Также я осознаю реакцию_upon? может не придерживаться принципа единой ответственности, и я бы, вероятно, переместил его на свой собственный модуль/класс, который я мог бы проверить с помощью заглушки.
Если кто-то может пролить свет на это для меня, это было бы потрясающе.
редактировать:
describe TempMod::MyClass do
let (:valid_planning_status_xml) {
'<StatusUpdate> <TitleId>2329</TitleId> <FromStatus>Proposed</FromStatus> <ToStatus>Confirmed</ToStatus> </StatusUpdate>'
}
let(:config) { double }
let(:status_resolver) { double }
subject(:message_processor) { TempMod::MyClass.new config, status_resolver }
context 'Given that the message XML is valid' do
it 'should check the context of the message' do
expect(message_processor.process valid_planning_status_xml).to call :check_me
end
context 'Given that the message is for a planning event update' do
it 'should call something' do
pending
end
end
context 'Given that the message is for a recording job update' do
end
context 'Given that the message is for a video title update' do
end
end
end
Извините, его попытка получить что-то в моей голове! То, что я получаю, заключается в ожидании, что вы включили, то есть тестируете весь класс (включая метод response_upon?), Так это то, как мне нужно его тестировать? или я тестирую response_upon? метод в отдельном ожидании, чтобы убедиться, что он делает то, что мне нужно от него? – Vade
@ Vade Я понятия не имею, что такое response_upon? метод выглядит, но я добавил к этому ожидание. – engineersmnky
вот тот! Я использовал неправильный вызов. Я использовал expect (myclass) .to had_recieved (: react_upon?) Спасибо! – Vade