菜鸟教程小白 发表于 2022-12-13 02:56:49

iOS Kiwi/Nocilla 测试不调用 block


                                            <p><p>我正在尝试熟悉 <a href="https://github.com/allending/Kiwi" rel="noreferrer noopener nofollow">Kiwi</a> BDD 测试框架。我将它与 <a href="https://github.com/luisobo/Nocilla" rel="noreferrer noopener nofollow">Nocilla</a> 结合使用模拟 HTTP 请求。这两个项目看起来都很棒,但我遇到了一些困难。我有以下测试规范:</p>

<pre><code>    beforeAll(^{ // Occurs once
         [ start];
    });

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

    beforeEach(^{ // Occurs before each enclosed &#34;it&#34;
      couch = [initWithDatabaseUrl:@&#34;http://myhost/mydatabase&#34;];
    });

    afterEach(^{ // Occurs after each enclosed &#34;it&#34;
      [ clearStubs];
    });

    it(@&#34;should be initialized&#34;, ^{
      ;
    });

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

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

      [equal:nil];

    });
    });
</code></pre>

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

<p>谢谢! </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您的测试的一般结构看起来不错。对于 <a href="https://github.com/allending/Kiwi/wiki/Asynchronous-Testing" rel="noreferrer noopener nofollow">asynchronous testing</a> ,使用这个:</p>

<pre><code>[ beTrue];
</code></pre>

<p>上面的 <code>!= nil</code> 和 <code>beTrue</code> 的原因是没有 shouldEventually + notBeNil 组合可用于测试最终的 nil 值。上面的测试会发现 <code>successJson</code> 最初为 nil,因此将继续轮询该值,直到您的回调使其非 nil。</p>

<p>请注意,如果您正在做一个积极的测试,例如检查 successJson == @"test",那么您可以使用更简单的形式来表示期望:</p>

<pre><code>[ equal:@&#34;test&#34;];
</code></pre>

<p>还请注意,您可以使用 <code>shouldEventuallyBeforeTimingOutAfter(2.0)</code> 将默认超时(我认为是 1 秒)增加到您想要的异步预期超时。</p></p>
                                   
                                                <p style="font-size: 20px;">关于iOS Kiwi/Nocilla 测试不调用 block ,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/17385537/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/17385537/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iOS Kiwi/Nocilla 测试不调用 block