Dulce de Leche Chocoflan Cake
10-12
servings
Main
Course
Print Recipe
Ingredients
Directions
For the Flan
1
(13.4 ounce/380 g) can La Lechera dulce de leche (1½ cups/355 ml)
Jump
1
(12 ounce/354 ml) can evaporated milk
Jump
4 oz
(113 g) cream cheese, at room temperature
Jump
1 ½ tsp
vanilla extract
Jump
Pinch of Diamond Crystal kosher salt
Jump
5 lg
eggs
Jump
For the Chocolate Cake
1 ⅓ c
(160 g) all-purpose flour
Jump
1 c
(200 g) sugar
Jump
½ c
(50 g) unsweetened cocoa powder
Jump
1 tsp
baking soda
Jump
½ tsp
baking powder
Jump
½ tsp
Diamond Crystal kosher salt
Jump
½ tsp
ground cinnamon
Jump
6 tbsp
(85 g) unsalted butter, cubed, at room temperature
Jump
½ c
(120 ml) brewed coffee
Jump
½ c
(120 ml) buttermilk
Jump
1 lg
egg
Jump
1 tsp
pure vanilla extract
Jump
FOR SERVING (OPTIONAL)
Dulce de leche, chopped nuts, whipped cream, ground cinnamon
Jump

Chocoflan is one of my favorite desserts to make for a birthday party or a get-together because it takes no time to put together and you get to have two desserts in one. Often referred to as el pastel imposible, or the impossible cake, chocoflan is made of a creamy flan layer and a fudgy chocolate cake bottom layer. The real magic happens during the baking process: The chocolate cake goes into the pan first and then you ladle the custard mixture over it, and while it bakes, the chocolate cake trades places with the flan and floats to the top, and the flan sinks to the bottom.

Directions

  1. Preheat the oven to 350ºF (180°C).
  2. Make the flan: In a blender, combine the dulce de leche, evaporated milk, cream cheese, vanilla extract, and salt and blend until smooth, 20 to 30 seconds. Pour in the eggs and blend for another 10 seconds until smooth.
  3. Make the chocolate cake: Sift the flour, sugar, cocoa powder, baking soda, baking powder, salt, and cinnamon directly into the bowl of a stand mixer fitted with a paddle attachment. Mix on the lowest setting until just combined, then add the softened butter and continue mixing on low speed until the mixture resembles wet sand. Stop the mixer and scrape down the sides of the bowl if needed.
  4. In a liquid measuring cup, combine the coffee, buttermilk, egg, and vanilla extract, then slowly pour it into the flour-butter mixture with the mixer running on low. Scrape down the sides of the bowl and beat the mixture on high for a full minute.
  5. Liberally coat a 10-cup (2.5 liter) Bundt pan with cooking spray. Add the cake batter, smoothing out the top with an offset spatula or spoon. Carefully ladle in the flan so you disturb the cake batter as little as possible. Transfer the Bundt pan to a roasting pan or baking dish large enough to fit the Bundt pan. Grease a piece of foil and place it greased side down onto the Bundt pan, folding it over the edges to loosely seal it. Transfer to the oven, then pour water (from the tap is fine) into the roasting pan or baking dish to come up 2 to 3 inches (5 to 7.5 cm).
  6. Bake for 2 hours to 2 hours 15 minutes, checking for doneness after 1 hour 45 minutes, using a skewer inserted into the cake to make sure it’s baked through, with little to no crumbs sticking to the skewer when you pull it out.
  7. Carefully remove the Bundt pan from the roasting pan and let it cool to room temperature before placing it in the fridge to cool completely, at least a couple of hours.
  8. Once you’re ready to serve, carefully run a knife around any edges that are still sticking, then invert onto a serving platter, gently shaking it up and down if it’s being difficult (if it was greased properly, you shouldn’t have any major issues).
  9. If desired, serve with dulce de leche and a sprinkle of chopped nuts or with whipped cream and a sprinkle of cinnamon.

Reprinted with permission from Chicano Eats by Esteban Castillo.

[email_signup id="3"]
<div class="email-subscribe exp-subscribe subscribe"> <div class="alert alert-success exp-success ga-etembed-success" style="display:none;"> Great! You've signed up successfully! </div> <div class="alert alert-danger exp-error" style="display:none;"> We are experiencing an error, please try again. </div> <form name="subscribe" id="email-signup" class="email-signup-form" action="https://tastecooking.com/wp-admin/admin-ajax.php" method="POST" target="_top" data-event-assigned="false"> <fieldset class="form-group form-inline email-submit-group"> <label for="email-address" class="sr-only">Email Address</label> <input id="email-newsletter" type="email" placeholder="your@email.com" class="email-newsletter text email form-control" name="email" value=""> <button type="submit" value="Subscribe" name="subscribe" class="btn btn-primary email-submit-btn ga-etembed-success"> <i class="fa fa-envelope"></i> Subscribe </button> </fieldset> <small class="exp-small terms" style=""> By clicking Subscribe, I acknowledge that I have read and agree to the Penguin Random House <a href="http://www.penguinrandomhouse.com/privacy/" target="_blank">Privacy Policy</a> and <a href="http://www.penguinrandomhouse.com/terms/" target="_blank">Terms of Use</a> and agree to receive news and updates from TASTE and Penguin Random House. </small> <fieldset class="field-group checkboxes" style="display:none"> <div class="checkbox"> <label> <input type="checkbox" name="programs[]" value="505,50501,1" class="exp-checkbox" checked="checked"> <span><strong>Tastebook General</strong></span> </label> </div> <div class="checkbox"> <label> <input type="checkbox" name="programs[]" value="505,50502,1" class="exp-checkbox" checked="checked"> <span><strong>Tastebook Promo</strong></span> </label> </div> </fieldset><!-- /.checkboxes --> <input type="hidden" name="data_acq_code" value="TASTE_POPUP_STATIC_ONGOING" /> <input type="hidden" name="data_programs" value="50501|505,50502|505" /> <input type="hidden" name="form_id" value="3" /> <input type="hidden" name="partner" value="" /> <input type="hidden" name="action" value="crown_email_signup_submit" /> <input type="hidden" name="ref_url" value="" /> </form> </div> <script> jQuery(document).ready(function () { var unassigned_forms; setInterval( function() { //Check for unassigned forms var forms = jQuery( '.email-signup-form' ); unassigned_forms = false; forms.each( function( index ) { if ( jQuery( this ).attr( 'data-event-assigned' ) === 'false' ) { unassigned_forms = true; } }); if ( unassigned_forms ) { forms.off( 'submit' ).on( 'submit', function ( e ) { forms.attr( 'data-event-assigned', 'true' ); e.preventDefault(); // Basic email validation var email = jQuery(e.target).find('.email-newsletter').val(), valid_email = false, groupEl = jQuery(e.target).closest('.email-subscribe'); if ( !!email && typeof(email) === "string" ) { var email_array = email.split('@'); if ( email_array.length === 2 ) { if ( email_array[1].split('.').length > 1 ) { valid_email = true; } } } if ( valid_email ) { jQuery('.alert-danger').hide(); // Show loading gif groupEl.find('.email-signup-form').hide(); groupEl.find('.email-submit-loading').show(); // Populate ref_url jQuery(this).find('input[name="ref_url"]').val(window.location.href); // Generate Payload var payload = jQuery(this).serializeArray(); jQuery.ajax({ url: jQuery(this).attr('action'), type: 'POST', data: payload, success: function (data) { // Hide loading spinner groupEl.find('.email-signup-form').show(); groupEl.find('.email-submit-loading').hide(); // Display success msg var target = jQuery(e.target); jQuery(e.target).hide(); jQuery(e.target).parent().find('.alert-success').show(); jQuery(e.target).parent().find('#downloadbtn').show(); }, fail: function (err) { // Hide loading spinner groupEl.find('.email-signup-form').show(); groupEl.find('.email-submit-loading').hide(); // Display failure msg var target = jQuery(e.target); jQuery(e.target).hide(); jQuery(e.target).parent().find('.alert-danger').show(); } }); } else { groupEl.find('.alert-danger').html('Please enter a valid email address.').show(); } }); forms.off( 'keypress' ).on( 'keypress', function ( e ) { if ( e.which === 13 ) { e.preventDefault(); jQuery( this ).submit(); } }); } }, 100); }); </script>
[email_signup id="3"]
<div class="email-subscribe exp-subscribe subscribe"> <div class="alert alert-success exp-success ga-etembed-success" style="display:none;"> Great! You've signed up successfully! </div> <div class="alert alert-danger exp-error" style="display:none;"> We are experiencing an error, please try again. </div> <form name="subscribe" id="email-signup" class="email-signup-form" action="https://tastecooking.com/wp-admin/admin-ajax.php" method="POST" target="_top" data-event-assigned="false"> <fieldset class="form-group form-inline email-submit-group"> <label for="email-address" class="sr-only">Email Address</label> <input id="email-newsletter" type="email" placeholder="your@email.com" class="email-newsletter text email form-control" name="email" value=""> <button type="submit" value="Subscribe" name="subscribe" class="btn btn-primary email-submit-btn ga-etembed-success"> <i class="fa fa-envelope"></i> Subscribe </button> </fieldset> <small class="exp-small terms" style=""> By clicking Subscribe, I acknowledge that I have read and agree to the Penguin Random House <a href="http://www.penguinrandomhouse.com/privacy/" target="_blank">Privacy Policy</a> and <a href="http://www.penguinrandomhouse.com/terms/" target="_blank">Terms of Use</a> and agree to receive news and updates from TASTE and Penguin Random House. </small> <fieldset class="field-group checkboxes" style="display:none"> <div class="checkbox"> <label> <input type="checkbox" name="programs[]" value="505,50501,1" class="exp-checkbox" checked="checked"> <span><strong>Tastebook General</strong></span> </label> </div> <div class="checkbox"> <label> <input type="checkbox" name="programs[]" value="505,50502,1" class="exp-checkbox" checked="checked"> <span><strong>Tastebook Promo</strong></span> </label> </div> </fieldset><!-- /.checkboxes --> <input type="hidden" name="data_acq_code" value="TASTE_POPUP_STATIC_ONGOING" /> <input type="hidden" name="data_programs" value="50501|505,50502|505" /> <input type="hidden" name="form_id" value="3" /> <input type="hidden" name="partner" value="" /> <input type="hidden" name="action" value="crown_email_signup_submit" /> <input type="hidden" name="ref_url" value="" /> </form> </div> <script> jQuery(document).ready(function () { var unassigned_forms; setInterval( function() { //Check for unassigned forms var forms = jQuery( '.email-signup-form' ); unassigned_forms = false; forms.each( function( index ) { if ( jQuery( this ).attr( 'data-event-assigned' ) === 'false' ) { unassigned_forms = true; } }); if ( unassigned_forms ) { forms.off( 'submit' ).on( 'submit', function ( e ) { forms.attr( 'data-event-assigned', 'true' ); e.preventDefault(); // Basic email validation var email = jQuery(e.target).find('.email-newsletter').val(), valid_email = false, groupEl = jQuery(e.target).closest('.email-subscribe'); if ( !!email && typeof(email) === "string" ) { var email_array = email.split('@'); if ( email_array.length === 2 ) { if ( email_array[1].split('.').length > 1 ) { valid_email = true; } } } if ( valid_email ) { jQuery('.alert-danger').hide(); // Show loading gif groupEl.find('.email-signup-form').hide(); groupEl.find('.email-submit-loading').show(); // Populate ref_url jQuery(this).find('input[name="ref_url"]').val(window.location.href); // Generate Payload var payload = jQuery(this).serializeArray(); jQuery.ajax({ url: jQuery(this).attr('action'), type: 'POST', data: payload, success: function (data) { // Hide loading spinner groupEl.find('.email-signup-form').show(); groupEl.find('.email-submit-loading').hide(); // Display success msg var target = jQuery(e.target); jQuery(e.target).hide(); jQuery(e.target).parent().find('.alert-success').show(); jQuery(e.target).parent().find('#downloadbtn').show(); }, fail: function (err) { // Hide loading spinner groupEl.find('.email-signup-form').show(); groupEl.find('.email-submit-loading').hide(); // Display failure msg var target = jQuery(e.target); jQuery(e.target).hide(); jQuery(e.target).parent().find('.alert-danger').show(); } }); } else { groupEl.find('.alert-danger').html('Please enter a valid email address.').show(); } }); forms.off( 'keypress' ).on( 'keypress', function ( e ) { if ( e.which === 13 ) { e.preventDefault(); jQuery( this ).submit(); } }); } }, 100); }); </script>