내 마지막 게시물 (Undefined Method in rspec testing)에 대한 훌륭한 도움을 받았지만 조금 더 도움이 필요했습니다.다른 클래스의 변수에 액세스
필자는 원하는 결과를 얻기 위해 기본적으로 코드를 변경해야하는 rspec 통합 사양을 가지고 있습니다. 운동의 일부로 사양을 변경할 수는 없습니다.
let(:user) { User.new(voucher) }
context 'no voucher' do
let(:voucher) { nil }
it 'should bill default price all the time' do
user.bill
expect(user.orders[0].billed_for).to eql 6.95
... ...
end
end
context 'vouchers' do
describe 'default vouchers' do
let(:voucher) { Voucher.create(:default, credit: 15) }
it 'should not bill user if has a remaining credit' do
user.bill
expect(user.orders[0].billed_for).to eql 0.0
... ...
end
end
필자는 불필요한 코드를 잘라 내기 위해 몇 개의 점을 배치했습니다.
나는 여기서 일어나는 일을 거의 이해하고있다.
새로운 사용자 클래스를 만들고 let : in의 user로 설정하고 있습니다. 그런 다음 문맥에 따라 바우처가 초기화되고 전달됩니다. 바우처는 첫 번째 테스트를 위해 설정되지 않습니다. 하나는 두 번째로 설정됩니다. 내 질문
require 'order'
require 'voucher'
class User
attr_accessor :voucher, :orders
def initialize(orders = [], voucher = nil)
@voucher = voucher
@orders = [orders]
end
def bill
new_order = Order.new(self)
@orders << new_order
end
end
방법은 initliased됩니다 어디서부터 시작
는 여기에 있습니다. 선택적 매개 변수가 있습니다. 나는 어디에서나이 설정 변수에 접근 할 수 없기 때문에 초기화가 어떻게 작동하는지에 대해서는 조금 불명확하다. 나는 범위 제한에 대한 좀 확실 해요 나는 현재 사용자의 바우처 클래스가 될 접근이class Order
DEFAULT_PRICE = 6.95
attr_accessor :user
def initialize(user)
@user = user
end
def billed_for
price = DEFAULT_PRICE
user.orders.each do |order|
price - order.billed_for
end
price
end
end
shoudl과 같은 순서 클래스에서 바우처 변수의 일부에 액세스 할 수 바라고 있어요으로 생각 user.voucher만큼 쉽습니다. ??
작은 질문. 바우처 클래스 자체를 초기화 할 수 있도록 현재 팩터 리 메서드를 사용하고 있습니다.
def self.create(type, *attrs)
* attrs 매개 변수는 기본적으로 배열입니다. 루프를 통해 루프를 돌리고 예상되는 변수에 바인드 할 수 있습니다. 배열에 특정 키가 있으면이 키의 값을 변수로 설정합니다. 이것이 가장 좋은 방법입니까 아니면 다른 인기있는 방법입니까?
나는 이것이 많이 묻는다.하지만 나는 정말로 혼란스럽고, annyone이 이것들을 해결할 수 있다면 나에게 감사 할 것이다. 감사.
나는 다른 클래스에서 이것을 어떻게 접근 할 것인가에 대해서는 조금 불분명하다. user.voucher는 값을 반환해야합니다. 아니면 무언가가 누락되었습니다. – user3750194
사용자에게 바우처가 없으면'voucher' 객체를 반환하거나'nil'을 반환합니다.변수에'바우처 (voucher) '를 할당 한 다음 변수를 사용하여 속성에 액세스 할 수 있습니다. – CWitty