我在我的规范文件中的 BEGIN_SPEC END_SPEC 块中定义了一些辅助块,我经常重用这些块。例如。断言某个对话框出现:

void (^expectOkAlert) (NSString *, NSString *) = ^void(NSString *expectedTitle, NSString *expectedMessage) {
    UIAlertView *alertView = [UIAlertView mock];
    [UIAlertView stub:@selector(alloc) andReturn:alertView];
    [[alertView should] receive:@selector(initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles:)
                      andReturn:alertView
                  withArguments:expectedTitle,expectedMessage,any(),@"OK",any()];
    [[alertView should] receive:@selector(show)];
};

我想在其他几个规范文件中重用这个块。这是否可能像我们通常在 Ruby 世界中使用规范助手和 rspec 所做的那样?

你如何管理你的全局规范助手?

最佳答案

你可以

  • expectOkAlert 声明为全局变量,位于其他单元测试包含的公共(public) header 中
    extern void (^expectOkAlert) (NSString *, NSString *);
    
  • 或在 expectOkAlert 类别中声明 KWSpec,您仍然需要一个通用 header ,该 header 包含在您需要使用它的单元测试中
    @implementation KWSpec(Additions)
    + (void)expectOkAlertWithTitle:(NSString*)title andMessage:(NSString*)message;
    @end
    

    你像这样使用它:
    it(@"expects the alert", %{
        [self expectOkAlertWithTitle:@"a title" andMessage:@"a message"];
    });
    
  • 或创建自定义匹配器并使用它来断言:
    @interface MyAlertMatcher: KWMatcher
    - (void)showOKAlertWithTitle:(NSString*)title andMessage:(NSString*)message;
    @end
    

    并在您的测试中使用它,如下所示:
    it(@"expects the alert", %{
        [[UIAlertView should] showOkAlertWithTitle:@"a title" andMessage:@"a message"];
    });
    

  • 所有方法都要求您在单元测试目标可用 header 中声明帮助程序,否则您将收到编译警告/错误。

    关于ios - Kiwi 规范的全局 helper ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23647103/

    10-11 23:05
    查看更多