Using the coupon code from Craft Commerce site
I had this problem and the cause was that I was doing this in the base template:

{% set cart = craft.commerce.carts.cart %}


When I should be doing the following:

{% if cart is not defined %}
    {% set cart = craft.commerce.carts.cart %}
{% endif %}


The reason behind is that the cart object in cart.getError function was always being initialized instead of getting the cart from the POST response.