我正在尝试测试UITextField发送editingChanged事件时是否调用了特殊处理程序。因此,为此,我通过sendActions方法模拟了此事件。但这在Test target中不起作用,仅在项目中即可(运行模式-模拟器)。

我写了一个小例子:

class Strange {
    private let handler: () -> Void

    init(textField: UITextField, handler: @escaping () -> Void) {
        self.handler = handler
        textField.addTarget(self, action:#selector(textableValueChanged), for: .editingChanged)
    }

    @objc private func textableValueChanged() {
        handler()
    }
}

在这里,我想看到“测试”打印,但是在sendActions事件之后没有调用此处理程序。我也尝试过使用expectation,但这并没有帮助我。
func testStrangeBehaviour() {
    let expectation = self.expectation(description: "Bla-bla")
    s = Strange(textField: textfield1) {
        print("test")
        expectation.fulfill()
    }

    textfield1.sendActions(for: .editingChanged)
    waitForExpectations(timeout: 5, handler: nil)
}

我究竟做错了什么?

最佳答案

在活性 cocoa 库中找到有趣的类别。
它帮助到我!
https://github.com/RACCommunity/Rex/blob/master/Tests/Helpers/UIControl%2BEnableSendActionsForControlEvents.swift

关于ios - UIControl的sendActions在测试目标中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42112026/

10-11 16:21