如何为代表编写测试进行编辑?

时间:2018-01-11 02:50:23

标签: testing model-view-controller qt5 pyqt5

我有一个树视图,某些字段需要使用自定义委托进行编辑。代表为值选择提供QListView。看起来应该使用QAbstractItemView.edit()方法从测试中启动编辑,但我无法弄清楚如何访问创建的编辑器(QListView),这样我就可以选择合适的元素为了测试。

这是我在切换到QComboBox之前与QListVew代表合作的测试的一部分,但它似乎太手动了。

for index, enumerator in enumerate(group.children):
    editor = delegate.createEditor(
        parent=viewport,
        option=None,
        index=target_index,
    )

    editor.setCurrentIndex(index)
    delegate.setModelData(editor, model, target_index)
    assert enumerator.uuid == item.enumeration_uuid

https://github.com/altendky/st/commit/643c5c30f87fc3bfd8b422687e81f740ec36ef44#diff-06bc81dbbd9f7a12878169d5238e1572R846

1 个答案:

答案 0 :(得分:0)

这是我想出的。

https://github.com/altendky/st/blob/089432162b9e8ca67eafdfcc2a4ecc34e8f0e96e/epyqlib/tests/test_attrsmodel.py#L848

for row, enumerator in enumerate(group.children):
    assert view.edit(
        target_index,
        PyQt5.QtWidgets.QAbstractItemView.AllEditTriggers,
        None,
    )
    editor, = view.findChildren(PyQt5.QtWidgets.QListView)

    index = editor.model().index(row, 0, editor.rootIndex())
    editor.setCurrentIndex(index)
    editor.clicked.emit(index)

    # this is fun.  if you get weird issues try doing this more times
    for _ in range(3):
        application.processEvents()

    assert enumerator.uuid == item.enumeration_uuid

请注意,我连接编辑器的点击信号以发布回车键事件,因为视图已被硬编码以捕获输入事件并完成编辑。