UICollectionViewCell子视图未在单元测试中更新

时间:2014-10-23 10:12:56

标签: ios unit-testing uicollectionviewcell kiwi

我有一个测试,我想加载一个UICollectionViewCell(CustomCollectionViewCell),传递一些数据并检查是否用这些数据更新了单元格的标签。

cell.nameLabel是单元格的UILabel,方法setText被调用,但文本本身永远不会更新。

cell.nameLabel.text始终返回xib中定义的初始文本。

标签定义如下:

@property (nonatomic, weak) IBOutlet UILabel *nameLabel;

规范:

SPEC_BEGIN(CustomCollectionViewCellSpec)

describe(@"CustomCollectionViewCell", ^{

    __block CustomCollectionViewCell *cell = nil;
    __block CustomCollectionViewCellData *cellData = nil;

    beforeEach(^{

        NSArray *objects = [[NSBundle mainBundle] loadNibNamed:@"CustomCollectionViewCell"
                                                         owner:self
                                                       options:nil];

        for (id object in objects) {

            if ([object isKindOfClass:[CustomCollectionViewCell class]]) {

                cell = (CustomCollectionViewCell *)object;

                break;
            }
        }

        cellData = [[CustomCollectionViewCellData alloc] init];
        cellData.name = @"Custom name";
    });

    afterEach(^{

        cell = nil;
        cellData = nil;
    });

    it(@"should populate the views with the cell data", ^{

        [[cell.nameLabel should] receive:@selector(setText:)
                           withArguments:cellData.name];

        [cell configureWithCellData:cellData];

        [[cell.cellData should] equal:cellData];

        [[cell.nameLabel.text should] equal:cellData.name];
    });
});

SPEC_END

1 个答案:

答案 0 :(得分:0)

问题是你是如何创建单元格的。 你不能为init分配一个单元格或获取nib。你问一个集合。

对于您需要的藏品:

    UICollectionView *collection = [[UICollectionView alloc] init];
    UICollectionCell *cell = [collection dequeueReusableCellWithReuseIdentifier:@"yourCellIdentifier" forIndexPath:0];

在此之后,您将能够获取您的单元格并对其进行修改,而不将其所有属性作为nil属性。