Utility functions for integration testing#3839
Utility functions for integration testing#3839alice-i-cecile wants to merge 57 commits intobevyengine:mainfrom
Conversation
|
Very interested in this topic. In the past I've used a minimal App, a |
|
@shanesveller This PR is now ready for review; I'd love to hear what you think of the end result. |
|
Overall, I think this is very useful, but this seems like something that should be behind a #[cfg(test)] conditional, or separated out entirely an optional dev-dependency. It's definitely not optimal to be compiling testing code into production binaries, even if it gets optimized out. |
That's an interesting idea. I think that I agree with you on the assertions, but the other helpers have important non-testing uses (even if they don't enable new functionality). I'll shuffle this around. |
|
I would prefer those methods to not be available during standard development, but they should be documented on docs.rs. I think the best way to have both would be to have everything in a
|
That could be an interesting pattern to show for tests: put all your invariants check in a system, and run that systems after an update |
|
I think I agree with basically all of your proposals. I'll make those changes and then re-request review :) |
|
Alright, so I think this is the best we can do for now. Fundamentally, I want to be able to query the world in a single line, but, because query is assumed to have a cached state stored somewhere, this is impossible. The only decent work-around is to include special-cased helper methods, to reduce the intense boilerplate of checking "is this value what I expect". In the long run, I very much want a better solution, but that will involve much more serious design work and engine refactoring. |
|
Closing this out in favor of something more scoped. |
Objective
Solution
WorldLimitations
Input mocking has not been included. Fundamentally; we need an abstraction over the input methods to handle this nicely.
See https://github.com/Leafwing-Studios/leafwing-input-manager/blob/main/src/input_mocking.rs for an external implementation of this.
Working with queries in integration tests still fundamentally sucks, because of the need to store query state somewhere. As a result, I've included some uncomfortably special-cased helpers.
TODO
set_componentrun_system