1

私はモカを使用しており、機能テストで使用しようとしています。

これが私のコードです:

  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)
4

1 に答える 1