0

我正在尝试根据我的 API 调用的成功或失败来测试我的应用程序是否正确运行。

当我断点__block语句时,块为 nil ( EXC_BAD_ACCESS) 当我调用userSuccess底部的块时,它也是 nil。我仍在尝试将头完全包裹在积木上。以为这次我有,但显然没有。

非常感谢任何帮助

    __block void (^userSuccess)(NSDictionary *data);
    __block void (^userFailure)(NSError *error);
    __block void (^authSuccess)(NSDictionary *authData);
    __block void (^authFailure)(NSError *authError);

    beforeAll(^{

        [testController stub:@selector(userManager) andReturn:[KWMock nullMockForClass:[CLASS class]]];

        [testController stub:@selector(authManager) andReturn:[KWMock nullMockForClass:[CLASS class]]];

        [testController.userManager stub:@selector(createWithData:success:failure:) withBlock:^id(NSArray *params) {

            userSuccess = [params objectAtIndex:1];
            userFailure = [params objectAtIndex:2];
            return nil;
        }];

        [testController.authManager stub:@selector(loginWithEmail:password:disableLaunch:success:failure:) withBlock:^id(NSArray *params) {

            authSuccess = [params objectAtIndex:3];
            authFailure = [params objectAtIndex:4];
            return nil;
        }];
    });

    it(@"should attempt to hit auth after a successful user call", ^{

        [[testController.authManager should] receive:@selector(loginWithEmail:password:disableLaunch:success:failure:)];
        NSDictionary *responseData = @{};
        userSuccess(responseData);
    });
4

1 回答 1

0

注意到一些问题:

  1. 在您的测试中设置的“应该收到”期望会覆盖您在 beforeAll() 中设置的存根
  2. 您应该使用 beforeEach(),它可以让您更好地控制测试(尽管在这种特殊情况下只有一个测试,beforeEach 和 beforeAll 的行为相同)
  3. 您没有触发任何代码执行,您只是在设置期望值。
  4. 我对控制器的 getter 覆盖有更多观察,但这是一个更长的话题。

修复 #3 和 #1 应该可以解决您的问题,因为问题的原因是控制器上的登录方法没有被调用,即使被调用,测试中设置的期望值也会覆盖 beforeAll( ) 称呼。

于 2015-04-02T05:39:47.780 回答