I think that estimation should be given by people who will eventually do the work. That means every role gives and estimate and you put them together.
It will always be a bit innacurate, but to me, it still seems much better than when someone else who does not do my type of work estimates how much I will spend on something. The room for error seems bigger in this case.
My personal experience is with two situations:
- every role gives their own estimate, so as a Tester, I give an estimate of only my work, testing effort
- Tester is not even asked for estimates, so everyone hopes (for the best) the Tester will not delay anyone for an unnecessary period of time
Scenario #2 really works only because I'm overly communicative when it comes to saying and promising when something is completed. So I manage to communicate more real estimates to the team even though no one really asks me. This approach also crumbles in many situations, but it's not completely up to me to change it in the company, even though I point this out every now and then.
So, to answer your question: based on what I think works better is a Tester estimating only their work (testing effort), and other people/roles estimate their work.