Doing what you did is fine. If you look at the various modules that provide assertions (like Test::Deep, Test::Exception, etc.) you'll see that they all encapsulate a complex test as a single pass/fail. So it's pretty much the default approach.
Without seeing the rest of your class it's hard to tell - but perhaps action_ok doesn't really belong to the test class and should be in a separate Test::Actions module?