0
레일 테스트를 위해 FactoryGirl과 Rspec을 사용하고 있으며 def_delegators
을 사용하여 정의 된 메소드를 사용할 때 문제가 발생했습니다. 예를 들어FactoryGirl - def_delegators를 호출 할 때 NoMethodError
이 테스트 :
it 'has the weekly discount' do
//I also tried using create here
menu = FactoryGirl.build(:menu, weekly_price: 100, price: 200)
meal = FactoryGirl.build(:meal, menu: menu)
price = meal.price
end
이 오류와 마지막 줄에 실패 :
1) Order has the weekly discount
Failure/Error: price = meal.price
NoMethodError:
undefined method `price' for nil:NilClass
# ./spec/models/order_spec.rb:17:in `block (2 levels) in <top (required)>'
그리고 이것은 가격이 Meal
에 정의 된 방법입니다
class Meal < ApplicationRecord
extend Forwardable
belongs_to :menu
def_delegators :@menu, :price
end
하는 경우 이 번호로 변경 :
class Meal < ApplicationRecord
extend Forwardable
belongs_to :menu
def price
menu.price
end
end
테스트가 통과합니다. 다른 곳에서 def_delegators를 사용하고 모든 테스트에서 같은 NoMethodError
으로 실패했습니다.
을했지만, 나는이 문서를 다음되었다 그 http://ruby-doc.org/stdlib-2.0.0/libdoc/forwardable/ rdoc/Forwardable.html 언제 사용해야합니까? – moondaisy
@moondaisy : 언제 인스턴스 변수에 위임을 사용해야합니까? 독자가없는 인스턴스 변수가있을 때. 나, 가능할 때마다 독자들을 사용하는 것을 선호한다. –