Я тестирую., Что действие индекса "заполняет массив всех вопросов.rspec test GET #index - ожидаемая коллекция содержит
require 'rails_helper'
RSpec.describe QuestionsController, type: :controller do
describe 'GET #index' do
before do
@questions = FactoryGirl.create_list(:question, 2)
get :index
end
it 'populates an array of all questions' do
binding.pry
expect(assigns(:questions)).to match_array(@questions)
end
it 'renders index view' do
expect(response).to render_template(:index)
end
end
end
Контроллеры/questions_controller
class QuestionsController < ApplicationController
def index
@questions = Question.all
end
end
заводы/questions.rb
FactoryGirl.define do
factory :question do
title "MyString"
body "MyText"
end
end
при выполнении тестов отображения ошибок:
1) QuestionsController GET #index заполнит массив всех вопросы Ошибка/Ошибка: ожидать (назначает (: вопросы)). match_array (@questions)
expected collection contained:
[#<Question id: 37, title: "MyString", body: "MyText", created_at: "2016-10-31 19:37:12", updated_at:...: "MyString", body: "MyText", created_at: "2016-10-31 19:37:12", updated_at: "2016-10-31 19:37:12">]
actual collection contained: [#<Question id: 15, title: "MyString", body: "MyText", created_at: "2016-10-30 21:23:52", updated_at:...: "MyString", body: "MyText", created_at: "2016-10-31 19:37:12", updated_at: "2016-10-31 19:37:12">]
the extra elements were: [#<Question id: 15, title: "MyString", body: "MyText", created_at: "2016-10-30 21:23:52", updated_at:...: "MyString", body: "MyText", created_at: "2016-10-30 21:23:52", updated_at: "2016-10-30 21:23:52">]
# ./spec/controllers/questions_controller_spec.rb:12:in `block (3 levels) in <top (required)>'
Почему бы не те же элементы коллекции?
вы можете объяснить, что делают этот код: @questions = [FactoryGirl.build_stubbed (: вопрос)] разрешить (Вопрос) .чтобы получить (: все) .and_return (@questions) –
уверен, 'FactoryGirl.build_stubbed' создаст объект ActiveRecord (со всеми его свойствами) без записи в базу данных. 'allow (...). receive' call используется для издевательства (в данном случае) вызова в базу данных, так что это говорит: ok, когда' Question.all' получает вызов, возвращаем '@ questions'. .. так как вы не тестируете модель здесь, вы можете издеваться над вызовами db, на самом деле вам вообще не нужен тест контроллера, если вы кодируете тест интеграции, который выполняет весь стек –
. good –