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

时间:2018-12-11 09:50:44

标签: swift unit-testing xib nimble

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

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

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

对于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"))
        }
    }

}

但是运行测试时,仅“测试失败”不会发生任何事情。 我在spec()中设置了断点,但它只是通过了。(什么都没发生)

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

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

1 个答案:

答案 0 :(得分: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)
}