def _resolve_constant_tags_in_step_text(step_text, constants):
    """Resolve all Constants in the given Step Text

    The Constants must have the form of: ``${name}``.

    >>> step_text = "Some Step ${x} with ${y} and Constants"
    >>> constants = {"x": "A", "y": "B"}
    >>> _resolve_constant_tags_in_step_text(step_text, constants)
    'Some Step A with B and Constants'

    If a ``${name}`` is not in the Constants it's not replaced
    and doesn't cause a warning. It's assumed to be part of the Step itself.

    >>> step_text = "Some Step ${x} with ${y} and Constants"
    >>> constants = {"x": "A"}
    >>> _resolve_constant_tags_in_step_text(step_text, constants)
    'Some Step A with ${y} and Constants'
    """
    for key, value in constants.items():
        step_text = step_text.replace("${%s}" % key, value)

    return step_text