A note about QApplication.exit()ΒΆ
Some pytest-qt
features, most notably waitSignal
and waitSignals
,
depend on the Qt event loop being active. Calling QApplication.exit()
from a test will cause the main event loop and auxiliary event loops to
exit and all subsequent event loops to fail to start. This is a problem if some
of your tests call an application functionality that calls
QApplication.exit()
.
One solution is to monkeypatch QApplication.exit()
in such tests to ensure
it was called by the application code but without effectively calling it.
For example:
def test_exit_button(qtbot, monkeypatch):
exit_calls = []
monkeypatch.setattr(QApplication, 'exit', lambda: exit_calls.append(1))
button = get_app_exit_button()
qtbot.click(button)
assert exit_calls == [1]
Or using the mock
package:
def test_exit_button(qtbot):
with mock.patch.object(QApplication, 'exit'):
button = get_app_exit_button()
qtbot.click(button)
assert QApplication.exit.call_count == 1