поток rspec не понятен - PullRequest
       0

поток rspec не понятен

0 голосов
/ 31 октября 2018

В моем приемочном тесте я хочу проверить значение gift.available_quantity, которое является виртуальным атрибутом:

  def available_quantity
    pendings_orders = Order.where(status: 'pending')
    order_lines_pending = OrderLine.where(order_id: pendings_orders)
    gift_quantity_pending = order_lines_pending.sum do |oline|
      return oline.quantity if oline.gift_ean13 == ean13
    end
    quantity - gift_quantity_pending
  end

Я не проверяю свой код, но это не проблема:)

Проблема в том, что мой rspec оценил ценность моего подарка. Available_quantity перед созданием моего поддельного заказа:

require 'acceptance_helper'

resource 'Gifts' do
  header 'Accept', 'application/json'
  header 'Content-Type', 'application/json'
  header 'Authorization', :authorization

  get '/api/v1/gifts' do
    let!(:member) { create(:member, id: 1) }

    let(:user) { create(:user, :activated, member: member) }
    let(:token) { Knock::AuthToken.new(payload: { sub: user.id }).token }
    let(:authorization) { "Bearer #{token}" }

    let!(:delivery_address) { create(:delivery_address, :favorited, member: member) }
    let!(:gifts) { create_list(:gift, 2, :enabled, quantity: 4) }

    let(:order_lines) { create(:order_line, gift_ean13: gifts.first.ean13, quantity: 1, order_id: order.id) }
    let(:order_lines2) { create(:order_line, gift_ean13: gifts.last.ean13, quantity: 2, order_id: order.id) }

    let!(:order) { create(:order, member: member, delivery_address: delivery_address) }


    example_request 'Get gift list' do
      expected_response = {
        gifts: [
        {
        id: gifts.first.id,
        name: gifts.first.name,
        description: gifts.first.description,
        reward_price: gifts.first.reward_price,
        quantity: gifts.first.quantity,
        date_from: gifts.first.date_from,
        date_to: gifts.first.date_to,
        image: nil,
        quantity_alert: gifts.first.quantity_alert,
        available_quantity: 3
      },
      {
        id: gifts.last.id,
        name: gifts.last.name,
        description: gifts.last.description,
        reward_price: gifts.last.reward_price,
        quantity: gifts.last.quantity,
        date_from: gifts.last.date_from,
        date_to: gifts.last.date_to,
        image: nil,
        quantity_alert: gifts.last.quantity_alert,
        available_quantity: 2
      }
    ]
  }

      expect(status).to eq(200)
      expect(response_body).to eq(expected_response.to_json)
    end
  end
end

Мой заказ еще не создан, поэтому gift.avalaible_quantity не годится ...

Может кто-нибудь помочь мне понять "поток RSpec"?

1 Ответ

0 голосов
/ 31 октября 2018

Я думаю, что проблема в том, что ваши order_lines не создаются до запуска спецификации.

Используйте let! для их создания, чтобы они существовали при запуске метода available_quantity.

let!(:order_lines) { create(:order_line, gift_ean13: gifts.first.ean13, quantity: 1, order_id: order.id) }
let!(:order_lines2) { create(:order_line, gift_ean13: gifts.last.ean13, quantity: 2, order_id: order.id) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...