2016-07-27 2 views
0

Я пытаюсь проверить метод, что произойдет, если последовательность входящих аргументов неверна. Я уже проверил параметр nil. мой метод принимает id, new_name, и я хочу знать, что делать, когда параметры new_name, idПроверка последовательности аргументов метода Ruby + Rspec

Надеюсь, мой вопрос ясен.

Метод, который я хочу, чтобы тест:

def update_recipe(id, new_name) 
    raise ArgumentError if id.nil? || new_name.nil? 
    recipe = find_recipe_by_id(id).dup 
    recipe.name = new_name 
    @storage[id] = recipe 
    recipe.freeze 
end 

Вот RSpec код:

context 'when argument sequence is not correct' do 
    let(:added_recipe) { subject.add_recipe recipe } 

    it 'raises an ArgumentError' do 
    expect { subject.update_recipe 'Pasta', added_recipe.id }.to raise_error ArgumentError 
    end 
end 
+0

Если вы беспокоитесь об этом, используйте ключевые аргументы: https://robots.thoughtbot.com/ruby-2-keyword-arguments –

+0

параметры Hash Вот что я точно нужно большое спасибо! – mk3

ответ

1

Вы могли бы сделать что-то подобное тому, что вы сделали для обработки ноль на основе того, что вы знаете, идентификатор или new_name должно быть. Например, убедитесь, что идентификатор является целым числом.

def update_recipe(id, new_name) 
    raise ArgumentError unless id.is_a? Integer 
    raise ArgumentError if id.nil? || new_name.nil? 
    recipe = find_recipe_by_id(id).dup 
    recipe.name = new_name 
    @storage[id] = recipe 
    recipe.freeze 
end 
+0

Да, но здесь проблема в том, что если я отправлю аргумент как def_update new_name, id не как id, new_name? – mk3

+0

Возможно, вам будет полезно, если вы покажете свои проблемы в коде – nikkypx

+0

Метод ожидает 2 параметра в этом порядке. def update_recipe id, new_name end Так что, если я использую такой метод, как .update_recipe new_name, id – mk3

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