Je suis très novice en matière de rails et j'ai suivi de nombreux tutoriels et exemples intéressants dans la communauté, alors d'abord merci!rspec ne pas recevoir la méthode d'enregistrement
J'ai un problème avec mon code de test. L'application fonctionne, et je peux voir à partir de la queue les journaux de test que la base de données est écrite, mais pour une raison quelconque, il ne retourne pas la méthode de sauvegarde correctement.
Ceci est fondamentalement juste de Rails Tutorial
Les cas de « succès » de Michael Hartl reviennent un « attendu sauver, mais reçu 0 fois », et le cas » d'échec réoriente au mauvais endroit. Il semble presque il est si ignorant le/bloc d'autre.
Voici le code correspondant de la spécification du contrôleur et le contrôleur
Je voudrais vraiment apprécier toute idée de cela.
Merci, -Joe
class WebsitesController < ApplicationController
before_filter :require_user, :only => [:new, :edit, :create, :destroy]
def new
@website = Website.new
@title = "Add New Website"
end
def edit
@website = Website.find(params[:id])
@title = "Edit Website"
end
def create
@website = current_user.websites.build(params[:website])
if @website.save
flash[:success] = "Website Added!"
redirect_to(profile_url)
else
render 'new'
@title = "Add New Website"
end
end
def destroy
end
end
require 'spec_helper'
describe WebsitesController do
integrate_views
describe "POST 'create'" do
before(:each) do
activate_authlogic
@user = Factory(:user)
UserSession.create(@user, true)
@attr = {
:domain => "http://www.example.com",
:description => "example site"
}
@website = Factory(:website, @attr.merge(:user => @user))
@user.websites.stub!(:build).and_return(@website)
end
describe "failure" do
before(:each) do
@website.should_receive(:save).and_return(false)
end
it "should render the 'new' page" do
post :create, :website => @attr
response.should render_template('websites/new')
end
end
describe "success" do
before(:each) do
@website.should_receive(:save).and_return(true)
end
it "should redirect to the profile page" do
post :create, :website => @attr
response.should redirect_to(profile_url)
end
it "should have a flash message" do
post :create, :website => @attr
flash[:success].should =~ /website added/i
end
end
end
end
Merci, cela semble résoudre une partie du problème. Bien que je pense que quelque chose d'un peu plus subtil se produit. La condition d'échec redirige vers le même endroit que le succès (uniquement dans les tests). Il semble presque ignorer l'instruction if/else dans le contrôleur. – jpoday
Intéressant. L'action de réussite redirige-t-elle correctement? Est-il possible que 'before_filter' ne permette pas d'atteindre la sauvegarde? – zetetic
L'action de réussite redirige correctement. C'est très bizarre. Si je supprime complètement le if/else et laisse simplement un @ website.save, tous les tests passent (stubbed ou devraient recevoir) mais ensuite il se plaint que les vues sont manquantes. Je pense que c'est le before_filter. J'ai le sentiment que je ne crée pas correctement le UserSession dans les tests. – jpoday