Search code examples
pyqtpysidepython-unittest

QtTest + unittest: How to use QSignalSpy?


How to use QtTest.QSignalSpy with unittest? It is not clear from the documentation; there are few examples.

from PySide6.QtWidgets import QApplication, QLabel, QWidget, QVBoxLayout, QPushButton
from PySide6.QtCore import Qt, Signal
from PySide6.QtTest import QTest, QSignalSpy
import sys
import unittest


class Main(QWidget):
    def __init__(self, parent: QWidget = None):
        super(Main, self).__init__(parent)
        self.resize(300, 200)
        self.counter = 0
        self.lbl = QLabel()
        self.lbl.setNum(self.counter)
        self.btn = QPushButton('btn')
        self.btn.clicked.connect(self.handle_button)
        vbox = QVBoxLayout()
        vbox.addWidget(self.btn)
        vbox.addWidget(self.lbl)
        self.setLayout(vbox)

    def handle_button(self):
        self.counter += 1
        self.lbl.setNum(self.counter)

##############################################################
class MainTest(unittest.TestCase):
    def setUp(self):
        self.view = Main()

    def test_on_click_button(self):
        btn = self.view.btn
        QTest.mouseClick(btn, Qt.LeftButton)

    def test_spy_signal(self):
        # ???

if __name__ == '__main__':
    app = QApplication(sys.argv)
    # window = Main()
    # window.show()
    # sys.exit(app.exec())
    unittest.main()


Solution

  • Too simple to be true. But it is.

        def test_my_signal(self):
            spy = QSignalSpy(self.view.my_signal)
            self.assertTrue(spy.isValid())