I thought some more about this textExposure variable, and I still don't like it. It seems reasonable to expect the test code to take in a player and a chunkManager upon initialization, but going and searching for things like this is a little bit sketchy.

Actually, even better, it could take in a chunkManager (really just something that exposes .chunk), and a position vector. That way you could really easily test it at arbitrary positions in the map (makes reproducing consistent results easier). Chunk could expose a .rawBlocks() function which gives access to a clone of the blocks it has.