0

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

我正在尝试测试ViewController,其视图为XIB.

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

为了viewDidLoad测试,我访问了 view 来触发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"))
        }
    }

}

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

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

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

4

1 回答 1

0

可能在您的QuestionViewController初始化中,您有与此类似的代码:

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)
}
于 2018-12-11T10:06:34.200 回答