Back to listRuby
RSpec - Unit Testing
Lv.51035@mukitaro10 playsDec 31, 2025
RSpec test with let, context, mocking, and expectations for behavior-driven testing.
preview.ruby
1RSpec.describe OrderService do2 describe '#process_order' do3 let(:user) { create(:user) }4 let(:product) { create(:product, price: 100) }5 let(:order) { build(:order, user: user, items: [product]) }6 let(:payment_gateway) { instance_double(PaymentGateway) }7 8 subject(:service) { described_class.new(payment_gateway) }9 10 before do11 allow(payment_gateway).to receive(:charge).and_return(true)12 end13 14 context 'when payment succeeds' do15 it 'creates the order' do16 expect { service.process_order(order) }17 .to change(Order, :count).by(1)18 end19 20 it 'charges the correct amount' do21 service.process_order(order)22 expect(payment_gateway).to have_received(:charge).with(100)23 end24 end25 26 context 'when payment fails' do27 before do28 allow(payment_gateway).to receive(:charge).and_raise(PaymentError)29 end30 31 it 'raises an error' do32 expect { service.process_order(order) }.to raise_error(PaymentError)33 end34 end35 end36endCustom problems are not included in rankings