rspec style guide

.to be 와 .to eq 의 차이

eq는 값을 비교 be는 object 자체를 비교 (같은 값을 가진 다른 오브젝트는 be를 사용했을 때, 다르다고 판정을 내림)

.eq 와 .match_array의 차이

eq는 순서를 따짐 match_array는 순서를 따지지 않음


###stub a chain of methods

it 'populates items in order of rank in requested sub_menu', :vcr do
    menu = create(:menu)
    sub_menu = create(:sub_menu, menu_id: menu.id)
    item1 = create(:item, sub_menu_id: sub_menu.id)
    item2 = create(:item, sub_menu_id: sub_menu.id)

    SubMenu.stub_chain(:friendly, :find).with(sub_menu.id).and_return(sub_menu)
    allow(sub_menu).to receive(:items_by_rank).and_return([item1, item2])

    get :show, id: sub_menu.id

    expect(assigns(:items)).to eq [item1, item2]
  end

Stub Method

Check if class method is called

it 'calls #update_sub_menu_rank_v2 of its sub_menus', :focus do
  menu = create(:menu_with_sub_menus)
  item = build(:item_with_sub_menu, name: '베베숲물티슈', brand: '베베숲', sub_menus: menu.sub_menus)
  # method stub
  allow(item).to receive(:create_weekly_rank) { true }
  
  sub_menu = item.sub_menus.first
  expect(Rank).to receive(:update_sub_menu_rank_v2).with(sub_menu.id, Time.now.end_of_week)
  item.save
end