We plan to write a Testing Guide in the coming weeks/months. Here is the issue: https://github.com/canjs/canjs/issues/3862. If there are other things you’d like to see on it, please feel free to comment there.
My personal strategy is to write 99% of an app’s tests as unit tests, since they are fast to write and fast to execute. The best tests are tests that you and your team will actually run all the time. The other 1% is usually functional smoke tests with FuncUnit.
For unit testing, you can pretty much pick whatever framework you want. We’ve used QUnit, Mocha, and Jasmine on different projects. They all have basically the same APIs now. I personally prefer Mocha because I think it makes asynchronous tests a little easier to write.
For functional testing, I’ve only really used FuncUnit. cypress.io seems cool, I just haven’t had a chance to try it out.
How to test VMs is a little harder question to answer, but we try to show some of the techniques in the DoneJS guides. If you have more specific questions, let me know and I’ll try to answer as best as I can.