CustomerViewController

CustomerViewController

测试从情节提要板加载的UITableViewController子类时,除非我:A)向其发送viewWillAppear:YES或B),否则返回null; B)获取tableView.numberOfSections。

为什么是这样?为什么不访问视图或不在主线程上发送loadView选择器来完成这项工作?

SpecBegin(CustomerViewController)
  describe(@"CustomerViewController", ^{

    __block CustomerViewController *_vc;

    beforeEach(^{
      NSLog(@"Before Each");
      UIStoryboard *mainstoryboard = [UIStoryboard storyboardWithName:@"Storyboard_Pad" bundle:nil];
      _vc = (CustomerViewController *)[mainstoryboard     instantiateViewControllerWithIdentifier:@"customer"];
    });

    it(@"the first cell should be the fullName cell", ^{
      // Following line is needed to make the following tests pass.
      [_vc viewWillAppear:YES];
      UITableViewCell *cell = [_vc.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
      expect(cell.reuseIdentifier).to.equal(@"fullName");
    });

  });

SpecEnd

最佳答案

您似乎正在对UI代码进行单元测试。我通常建议不要这样做,因为您将手动尝试模拟ViewController生命周期方法,以便接近重现UI在运行的应用程序中的行为。

我建议尝试两件事:


对模型/逻辑进行单元测试(例如,表视图正在使用的数据)。
如果必须测试UI,建议使用Xcode查看Automated Testing

10-08 06:10