Method works but tests fail?

There's nothing I can see from the code from your example that is
wrong. Obviously, the object is not saving so I suspect that the
parameters you are passing are incorrect and failing validation. Use
an assert_valid to find out where the validation errors are.

e.g. assert_valid(assigns(:recipient))