Как проверить переменные экземпляра, используя методы ".where" и ".where.not" в контроллерах - PullRequest
0 голосов
/ 07 марта 2019

Я новичок в программировании.Сейчас я тестирую свой products_controller с помощью rspecЭтот products_controller имеет много переменных экземпляра, и некоторые из них используют метод «где» для получения необходимых данных.

Я хотел бы знать, как тестировать код, используя «.where» и «.where.not» в контроллерах.

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

models / product.rb (извлеченная ассоциация)

belongs_to :category, optional: true
belongs_to :user
has_many :product_images
accepts_nested_attributes_for :product_images

products_controller.rb

def show
  @product = Product.find(params[:id])
  @images = @product.product_images.limit(4)
  @products = @product.user.products.where.not(id: params[:id]).limit(6)
  @category_products = Product.where(category_id:@product.category).where.not(id: params[:id]).limit(6)
  @prev_item = @product.showPrevItem if @product.checkPrevItem
  @next_item = @product.showNextItem if @product.checkNextItem
end

products_controller.spec.rb

FactoryBot.define do
  factory :product do

    name                 {'アメリカンイーグルのTシャツ'}
    description          {'買ったばっかり'}
    category_id          {'1'}
    size                 {'M'}
    product_status       {'新品、未使用'}
    delivery_fee         {'着払い'}
    local                {'北海道'}
    lead_time            {'1~2日で発送'}
    price                {'300'}
    transaction_status   {'出品中'}

    user
    category
  end
end

products_controller_spec.rb (не полностью)

require 'rails_helper'

describe ProductsController, type: :controller do
  describe 'GET #show' do
    it "renders the :show template" do
      product = create(:product)
      get :show, params: { id: product }
      expect(response).to render_template :show
    end

    it "assigns the requested product to @product" do
      product = create(:product)
      get :show, params: {id:product}
      expect(assigns(:product)).to eq product
    end

    it "populates an array of products" do
      product = create(:product)
      user = product.user
      products = create_list(:product, 3)
    end
  end
end

1 Ответ

1 голос
/ 07 марта 2019

Например, на фабрике products вы можете передать ассоциацию для создания всех продуктов с одним и тем же пользователем:

product = create(:product)
user = product.user
products = create_list(:product, 3, user: user)

Затем вы можете протестировать несколько вещей, которые вы считаете актуальными, например, наличиеотношение:

get :show, params: { id: product }
expect(assigns(:products).size).to eq 3

предел запроса:

products = create_list(:product, 10, user: user)
get :show, params: { id: product }
expect(assigns(:products).size).to eq 6

без включения продукта:

get :show, params: { id: product }
expect(assigns(:products)).not_to include(product)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...