gpt4 book ai didi

iOS Kiwi/Nocilla 测试不调用 block

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:46:26 24 4
gpt4 key购买 nike

我正在尝试熟悉 Kiwi BDD 测试框架。我将它与 Nocilla 结合使用模拟 HTTP 请求。这两个项目看起来都很棒,但我遇到了一些困难。我有以下测试规范:

    beforeAll(^{ // Occurs once
[[LSNocilla sharedInstance] start];
});

afterAll(^{ // Occurs once
[[LSNocilla sharedInstance] stop];
});

beforeEach(^{ // Occurs before each enclosed "it"
couch = [[Couch alloc]initWithDatabaseUrl:@"http://myhost/mydatabase"];
});

afterEach(^{ // Occurs after each enclosed "it"
[[LSNocilla sharedInstance] clearStubs];
});

it(@"should be initialized", ^{
[couch shouldNotBeNil];
});

context(@"GET requests", ^{
it(@"should get document by id", ^{
__block NSData *successJson = nil;
__block NSError *requestErr = nil;
stubRequest(@"GET", @"http://myhost/mydatabase/test").
withHeader(@"Accept", @"application/json").
withBody(@"{\"_id\":\"test\",\"_rev\":\"2-77f66380e1670f1876f15ebd66f4e322\",\"name\":\"nick\"");

[couch getDocumentById:@"test" success:^(NSData *json){
successJson = json;
} failure:^(NSError *error) {
requestErr = error;
}];

[[successJson shouldNot]equal:nil];

});
});

抱歉,代码片段太长。我想确保我提供了上下文。如您所见,我正在测试发出 GET 请求并在“成功” block 中报告结果并在“失败” block 中报告错误的对象的行为。我有两个 __block 变量来接受地存储成功和失败。目前,测试检查“成功”变量是否有值(不是零)。这个测试通过。然而,调试这个测试似乎没有执行任何 block 。 successJson 出现为零。我希望 Nocilla 将 stub 主体内容传递给成功 block 参数。那么我的测试构造不正确吗?

谢谢!

最佳答案

测试的总体结构看起来不错。对于 asynchronous testing ,使用这个:

[[expectFutureValue(theValue(successJson != nil)) shouldEventually] beTrue];

上面 != nilbeTrue 的原因是没有 shouldEventually + notBeNil 这种组合可以用来测试最终的 nil 值。上面的测试会发现 successJson 最初是 nil,因此将继续轮询该值,直到您的回调使其成为非 nil。

请注意,如果您正在进行正面测试,例如检查 successJson == @"test",那么您可以使用更简单的形式来表示期望:

[[expectFutureValue(successJson) shouldEventually] equal:@"test"];

另请注意,您可以使用 shouldEventuallyBeforeTimingOutAfter(2.0) 将默认超时(我认为是 1 秒)增加到您想要的异步预期超时。

关于iOS Kiwi/Nocilla 测试不调用 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17385537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com