Ich habe alle verwandten Beiträge durchgesehen, aber kann nicht herausfinden, wie mein Test zu bestehen ... Ich bekomme immer wieder eine Fehlermeldung, dass Food.count sollte um 1 geändert haben, aber es tat es nicht. Ich bin mir nicht sicher, ob es mit der Tatsache zu tun hat, dass meine create-Methode eine Beziehung aufbaut?Rails Test Post erstellen Methode RSPEC
def create
@food = current_user.foods.build(food_params)
if @food.save
redirect_to user_path(@food.user_id)
else
render 'new'
end
end
class Food < ApplicationRecord
belongs_to :user
has_many :votes, dependent: :destroy
validates :title, :kind, :image, presence: true
mount_uploader :image, ImageUploader
def Food.random_soup
Food.all.where(kind: 'soup').shuffle
end
end
create_table "foods", force: :cascade do |t|
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "kind"
t.string "title"
t.integer "wins"
t.integer "loses"
t.integer "user_id"
t.string "image"
t.text "recipe"
t.text "description"
end
before(:each) do
user = create(:user)
sign_in(user)
end
describe "POST create" do
context "with valid attributes" do
it "creates a new food" do
food_params = FactoryGirl.attributes_for(:food)
expect { post :create, :food => food_params }.to change(Food, :count).by(1)
end
end
end
factory :food do |f|
f.kind "soup"
f.title "Clam Chowder"
f.id 1
f.image File.open(File.join(Rails.root, '/app/assets/images/Canada.png'))
end
Haben Sie versucht, eine Puts-Anweisung in Ihrem @ food.save-Block zu platzieren, um zu sehen, ob es druckt? – Huy
Ich habe nicht, aber ich hatte versucht, manuell zu testen, indem Sie ein neues Essen aus meiner App erstellen und den Code korrekt ausgeführt. Das neue Essen wurde auch in meiner Konsole –
aufgeführt Ihre Aktion sieht gut aus. Ich könnte versuchen zu erklären, vorbei in den Lebensmitteln params (dh 'food_params = {Art: 'Suppe', Titel: 'Clam Chowder', Bild: 'test.jpg'}') – Huy