'All the underlying ``IStateChange`` will be run in Eliot context in
which the sequential ``IStateChange`` is run, even if they are not
run immediately.
:param combo: ``sequentially`` or ``in_parallel``.
:param action_type: ``eliot.ActionType`` we expect to be parent of
sub-changes\' log entries.
:param logger: A ``MemoryLogger`` where messages go.'

def assert_nested_logging(self, combo, action_type, logger):

    actions = [ControllableAction(result=Deferred()), ControllableAction(result=succeed(None))]
    for action in actions:
        self.patch(action, '_logger', logger)
    run_state_change(combo(actions), None, InMemoryStatePersister())
    actions[0].result.callback(None)
    parent = assertHasAction(self, logger, action_type, succeeded=True)
    self.assertEqual(dict(messages=parent.children, length=len(parent.children)), dict(messages=LoggedAction.ofType(logger.messages, CONTROLLABLE_ACTION_TYPE), length=2))
