Ранее я исправил проблему с некоторым кодом, который работает, хотя он немного уродлив. Проблема в том, что она ломает мои тесты! Идея здесь заключается в том, что я могу создать кампанию и связать 1 почтовый файл и один-ко-многим PDF.Rails 4: Factory Girl & Rspec с ассоциированной моделью
Предыдущий вопрос и решение: Rails 4.2: Unknown Attribute or Server Error in Log
Вот сообщение об ошибке:
консоль
1) CampaignsController POST #create with valid params
Failure/Error: post :create, campaign: attributes_for(:campaign)
ActiveRecord::RecordNotFound:
Couldn't find Uploadzip with 'id'=
# ./app/controllers/campaigns_controller.rb:15:in `create'
# ./spec/controllers/campaigns_controller_spec.rb:36:in `block (4 levels) in <top (required)>'
..и остальная часть кода.
спецификации/фабрики/campaigns.rb
FactoryGirl.define do
factory :campaign do |x|
x.sequence(:name) { |y| "Rockfest 201#{y} Orange County" }
x.sequence(:comment) { |y| "Total attendance is #{y}" }
end
end
спецификации/Контроллеры/campaigns_controller.rb
describe "POST #create" do
context "with valid params" do
before(:each) do
post :create, campaign: attributes_for(:campaign)
end
.........
end
приложение/контроллеры/campaigns_controller.rb
class CampaignsController < ApplicationController
......................
def create
@campaign = Campaign.new(campaign_params)
if @campaign.save
zip = Uploadzip.find(params[:uploadzip_id])
zip.campaign = @campaign
zip.save
flash[:success] = "Campaign Successfully Launched!"
redirect_to @campaign
else
................
end
end
.......................
private
def campaign_params
params.require(:campaign).permit(:name, :comment, :campaign_id, uploadpdf_ids: [])
end
end
Это кажется простым, и я предполагаю, что это так, но я попытался бросить несколько вещей и, похоже, не смог его передать. Как бы я поддерживал новую логику контроллера в этом тесте? Любая помощь приветствуется.
UPDATE
С советами zetitic, я создал следующий код, в котором успешно проходит.
before(:each) do
@uploadzip = create(:uploadzip)
post :create, campaign: attributes_for(:campaign), uploadzip_id: @uploadzip
end
все еще получаю «Не удалось найти Uploadzip с„ид“= 3» .. – shroy
Строка с этим идентификатором должны, конечно, существует в тестовую базу данных. Возможно, вам потребуется создать UploadedZip через фабрику в блоке before и использовать его ID. – zetetic
Сделал это! Я отправлю ответ в нижней части сообщения и займу вас. Благодаря! – shroy