All these tests just pass a single argument value down the chain unchanged, so if there was a bug where chain() passes everybody the original input 'args' and ignores later results, it wouldn't get caught.  Perhaps you could do something like save off each received arg into a global array, and increment the numbers before resolving, so that you can look at the overall history of values that were passed and verify they're correct?