私はモカを使用しており、機能テストで使用しようとしています。
これが私のコードです:
test "should post create" do
user = FactoryGirl.create(:user)
UserSession.create(user)
recipe_attributes = FactoryGirl.attributes_for(:recipe)
Recipes::Recipe.any_instance.expects(:save)
post(:create, {'recipes_recipe' => recipe_attributes})
assert_response(302)
assert_not_nil(assigns(:recipe))
end
コードはassert_response(302)
、応答が であったと述べて失敗します200
。行を削除すると:
Recipes::Recipe.any_instance.expects(:save)
テストに合格します。
create
アクションは次のとおりです。
def create
@recipe = Recipe.new(params[:recipes_recipe])
photo_keys = params.keys.select{|k|k.match(/^photo/)}
@photos = []
photo_keys.each do |photo_key|
@photos << Photo.new(params[photo_key])
end
@recipe.tags = Tag.parse(params[:tags])
@recipe.author = current_user
photos_valid = !@photos.empty? ? @photos.all?{|photo|photo.save} : true
puts photos_valid.inspect
if @recipe.save && photos_valid
unless @photos.empty?
@photos.each do |photo|
photo.recipe_id = @recipe.id
photo.save
end
end
flash[:notice] = 'Recipe was successfully created.'
redirect_to recipe_url(@recipe.slug)
else
puts @recipe.save.inspect
puts @recipe.errors.inspect
flash[:error] = 'Could not create recipe. '
flash[:error] += 'Please correct any mistakes below.'
render 'new'
end
end
Mocha のポイントは、テストを高速化するためにデータベースに触れないことであるため、句puts Recipes::Recipe.all.inspect
にa を入れると、リストは空になります。else
それで、私の質問は、この状況でテストを行うにはどうすればよいですか? create
この行は、アクションが正常に機能していることを確認するのに十分ですか?
Recipes::Recipe.any_instance.expects(:save)