Unit test cellForRowAtIndexPath when using storyBoards

If I remove a cell from the identifier in the storyboard, as in the unit testing method, can I call cellForRowAtIndexPath and not have cell nil?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { MyCustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCustomCell]; cell.guestNameText.text = self.details.guestName; return cell; } 

Doesn’t work, put a breakpoint above, after calling dequeReusableCell, and the cell is zero:

ETA: UPDATED WORK CODE FOR TEST TEST:

 - (void)setUp { [super setUp]; _detailVC_SUT = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:kDetailsVC]; _myService = [OCMockObject niceMockForClass:[MyService class]]; _detailVC_SUT.service = _myService; } - (void)test_queryForDetailsSucceeded_should_set_cell_text_fields { [_detailVC_SUT view]; // <--- Need to load the view for this to work Details *details = [DetailsBuilder buildStubDetails]; [_detailVC_SUT queryForDetailsSucceededWithDetails:details]; [self getFirstCellForGuestName]; } - (void)getFirstCellForGuestName { MyCustomTableViewCell *guestNameCell = (MyCustomTableViewCell*)[_detailVC_SUT tableView:_detailVC_SUT.detailsTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]; expect(guestNameCell.guestNameText.text).to.equal(@"Mark"); } 
+4
source share
1 answer

This is how I test table views and their cells. The key here is to call beginAppearanceTransition on the view controller to load it from the storyboard.

 class MyTests: XCTestCase { var viewController: UIViewController! override func setUp() { super.setUp() let storyboard = UIStoryboard(name: "MyStoryboard", bundle: nil) viewController = storyboard.instantiateViewControllerWithIdentifier("myViewControllerId") viewController.beginAppearanceTransition(true, animated: false) } override func tearDown() { super.tearDown() viewController.endAppearanceTransition() } func testShowItemsFromNetwork() { // // Load the table view here ... // let tableView = viewController.tableView // Check the number of table rows XCTAssertEqual(3, tableView.dataSource?.tableView(tableView, numberOfRowsInSection: 0)) // Check label text of the cell in the first row let indexPath = NSIndexPath(forRow: 0, inSection: 0) let cell = tableView.dataSource?.tableView(tableView, cellForRowAtIndexPath: indexPath) XCTAssertEqual("Test cell title", cell!.textLabel!.text) } } 
+6
source

Source: https://habr.com/ru/post/1493494/


All Articles