如何使用 Quick 使用 XIB 文件测试视图控制器?

How to test view controller with XIB file using Quick?

我正在使用 Quick 库进行单元测试。

我正在尝试测试 ViewControllerXIB 的视图。

我将视图与文件所有者连接起来,并将视图组件与视图控制器连接起来。

对于 viewDidLoad 测试,我访问了视图以触发 viewDidLoad()

这是我的代码。

override func spec() {
    super.spec()

    var sut: QuestionViewController!

    describe("viewDidLoad") {
        afterEach {
            sut = nil
        }
        beforeEach {
            sut = QuestionViewController(question: "Q1")
            _ = sut.view
        }

        it("renders question header text") {
            expect(sut.headerLabel.text).toEventually(equal("Q1"))
        }
    }

}

但是当 运行 测试时,只有 'test fail' 没有任何反应。 我在 spec() 中设置了断点,但它只是通过了。(没有任何反应)

删除 xib 文件并以编程方式制作 UI 组件后,测试终于成功了。

如何在使用 Quick 时测试包含 xib 文件的 ViewController(viewDidLoad 等)?

可能在您的 QuestionViewController init 中您有类似的代码:

init(question:String) {
    //do something with a question
    super.init(nibName:"QuestionNibFileName", bundle: nil)
}

这在您的主要目标中运行良好,但在测试中不起作用,因为这里的默认包不同。你应该使用 Bundle(for:type(of:self)) 所以代码应该是这样的:

init(question:String) {
    //do something with a question
    let bundle = Bundle(for:type(of:self))
    super.init(nibName:"QuestionNibFileName", bundle: bundle)
}