我正在尝试单独测试一个unwind segue。
但似乎在测试中,调用performSegueWithIdentifier:
方法不执行展开segue而对其他类型的segue执行,例如Push和Modal segues。
基本上我要做的是以下内容:
使用以下代码行以编程方式执行展开segue:
[vc performSegueWithIdentifier:@"unwind" sender:vc];
(我尝试将发件人更改为nil
和vc.button
,这是展开segue的触发按钮。但测试仍然失败。)
使用以下代码行检查视图控制器中的seguePerformed
属性是否设置为YES:
XCTAssertTrue(sut.seguePerfomed, @"should be true.");
在这个视图控制器的- prepareForSegue:
方法中,我使用segue的标识符来识别展开segue。如果是展开segue,则将视图控制器的seguePerformed属性设置为YES。
我认为我的performSegue
代码存在问题。
但是,如果我将此行[vc performSegueWithIdentifier:@"unwind" sender:vc];
复制到我的视图控制器的viewDidAppear
方法中进行测试,并在iPhone模拟器中输入此视图。输入后它确实返回到之前的视图。
很抱歉,我忘了提及我也尝试了以下代码段:
- (void)testPerformingSegueShouldSetSeguePerform
{
// given
UINavigationController *nvVC = [sut.storyboard instantiateViewControllerWithIdentifier:@"nvVC"];
[nvVC pushViewController:sut animated:NO];
sut = (NTDSubViewController *)nvVC.topViewController;
// when
[sut performSegueWithIdentifier:@"unwind" sender:sut.button];
// then
XCTAssertTrue(sut.seguePerfomed, @"should be true.");
}
答案 0 :(得分:0)
展开segue仅在实时上下文中有意义,因为它与实例有关,而与类无关。例如,如果我在View Controller A中启动并按下View Controller B,那么我可以展开,弹出到View Controller A - 不仅仅是任何View Controller A,而是我们开始使用的实例。
但是你只是将View Controller B拉出故事板并尝试放松。你不能,因为没有视图控制器A来放松。为了实现这一点,您必须完全按照我刚才描述的方式执行操作:从View Controller A开始,按下View Controller B,然后告诉 View Controller B要放松。