J'ai regardé tous les articles liés, mais je n'arrive pas à comprendre comment faire passer mon test ... Je continue à recevoir une erreur disant que Food.count aurait dû changer de 1 mais ce n'est pas le cas. Je ne suis pas sûr si cela a à voir avec le fait que ma méthode create crée une relation?Rails test poster créer la méthode 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
Avez-vous essayé de placer une déclaration puts dans votre @ bloc food.save pour voir si elle imprime? – Huy
Je ne l'ai pas fait, mais j'ai essayé de tester manuellement en créant un nouvel aliment à partir de mon application, et le code exécuté correctement. La nouvelle nourriture a également été répertorié dans ma console –
votre action de création semble très bien. Je pourrais essayer d'expliquer en passant les params de nourriture (ie 'food_params = {genre: 'soupe', titre: 'chaudrée de palourdes', image: 'test.jpg'}') – Huy