Given that the stakeholder "would not know about the necessity to wait", then no, there should not be an explicit
wait step. There are times when it's appropriate to have one, but they are times when the wait is something that the user would care about (for example, automated logouts on financial software).
In fact, you probably shouldn't have any explicit waits in your tests. You don't care that the time has passed, you care that the operations have completed. It's still not ideal to have a
Given the operations have completed step (since, as you say, the user wouldn't phrase it that way) and to instead have that in the code behind the
Even besides the question of whether the user would phrase the step that way, there's a direct technical reason not to use explicit
waits: they are slow, and they stay slow. If your code takes 2 seconds to process things, then waiting 2 seconds isn't actually enough - you need to wait long enough that you can be pretty sure that it will have finished (even if the system is under additional load). So you might need to build in a little extra time, say 3 seconds. Which isn't too bad for one test, but if you end up with a suite of a few hundred tests, then executing the suite gets slower and slower (especially since, when doing BDD, you often reuse steps.) Furthermore - if later on, you come up with a faster way to do things (or get a faster machine, or a faster execution environment for automated tests), then you don't get any of that speed benefit, since the test is still explicitly waiting an amount of time.