Nocilla 0.11.0

Nocilla 0.11.0

测试已测试
Lang语言 Obj-CObjective C
许可协议 MIT
发布最后发布2016年8月

Luis SolanoAndrew K. Boyd 维护。



Nocilla 0.11.0

  • 作者:
  • Luis Solano

惊人的 iOS 和 OS X HTTP 请求缓存。测试 HTTP 请求从未如此简单。

这个库受到 WebMock 的启发,并采用 此方法 来进行请求缓存。

特性

  • 在单元测试中缓存 HTTP 和 HTTPS 请求。
  • 支持 NSURLConnection、NSURLSession 和 ASIHTTPRequest。
  • 惊人的 DSL 语法将提高测试的可读性和可维护性。
  • 使用正则表达式匹配请求。
  • 使用错误缓存请求。
  • 经过测试。
  • 快速。
  • 可扩展以支持更多 HTTP 库。

安装

作为 CocoaPod

只需将此内容添加到您的 Podfile 中

pod 'Nocilla'

其他方法

  • 您应该能够将 Nocilla 添加到您的源代码库中。如果您正在使用 git,请考虑使用 git submodule

使用方式

是的,以下代码是有效的 Objective-C,或者至少应该是这样的

以下示例使用 Kiwi 进行描述。

常用部分

直到 Nocilla 可以直接hook到 Kiwi,您必须将以下代码片段包含在您希望使用 Nocilla 的规范中

#import "Kiwi.h"
#import "Nocilla.h"
SPEC_BEGIN(ExampleSpec)
beforeAll(^{
  [[LSNocilla sharedInstance] start];
});
afterAll(^{
  [[LSNocilla sharedInstance] stop];
});
afterEach(^{
  [[LSNocilla sharedInstance] clearStubs];
});

it(@"should do something", ^{
  // Stub here!
});
SPEC_END

缓存请求

缓存一个简单的请求

它将返回默认响应,即 200 和空正文。

stubRequest(@"GET", @"http://www.google.com");

使用正则表达式缓存请求

stubRequest(@"GET", @"^http://(.*?)\\.example\\.com/v1/dogs\\.json".regex);

缓存在特定头部的请求

stubRequest(@"GET", @"https://api.example.com").
withHeader(@"Accept", @"application/json");

缓存带有多个头部的请求

使用 withHeaders 方法与 Objective-C 情境点击一起使用是有意义的,但它接受一个 NSDictionary。

stubRequest(@"GET", @"https://api.example.com/dogs.json").
withHeaders(@{@"Accept": @"application/json", @"X-CUSTOM-HEADER": @"abcf2fbc6abgf"});

使用特定体 stub 请求

stubRequest(@"POST", @"https://api.example.com/dogs.json").
withHeaders(@{@"Accept": @"application/json", @"X-CUSTOM-HEADER": @"abcf2fbc6abgf"}).
withBody(@"{\"name\":\"foo\"}");

您还可以使用 NSData 作为请求体

stubRequest(@"POST", @"https://api.example.com/dogs.json").
withHeaders(@{@"Accept": @"application/json", @"X-CUSTOM-HEADER": @"abcf2fbc6abgf"}).
withBody([@"foo" dataUsingEncoding:NSUTF8StringEncoding]);

甚至支持正则表达式!

stubRequest(@"POST", @"https://api.example.com/dogs.json").
withHeaders(@{@"Accept": @"application/json", @"X-CUSTOM-HEADER": @"abcf2fbc6abgf"}).
withBody(@"^The body start with this".regex);

返回特定的状态码

stubRequest(@"GET", @"http://www.google.com").andReturn(404);

返回特定的状态码和头部

这里使用的是相同的 Approch,您可以使用 withHeaderwithHeaders

stubRequest(@"POST", @"https://api.example.com/dogs.json").
andReturn(201).
withHeaders(@{@"Content-Type": @"application/json"});

返回特定的状态码、头部和体

stubRequest(@"GET", @"https://api.example.com/dogs.json").
andReturn(201).
withHeaders(@{@"Content-Type": @"application/json"}).
withBody(@"{\"ok\":true}");

您还可以使用 NSData 作为响应体

stubRequest(@"GET", @"https://api.example.com/dogs.json").
andReturn(201).
withHeaders(@{@"Content-Type": @"application/json"}).
withBody([@"bar" dataUsingEncoding:NSUTF8StringEncoding]);

返回使用 curl -is 记录的原始响应

curl -is http://api.example.com/dogs.json > /tmp/example_curl_-is_output.txt

stubRequest(@"GET", @"https://api.example.com/dogs.json").
andReturnRawResponse([NSData dataWithContentsOfFile:@"/tmp/example_curl_-is_output.txt"]);

全部一起

stubRequest(@"POST", @"https://api.example.com/dogs.json").
withHeaders(@{@"Accept": @"application/json", @"X-CUSTOM-HEADER": @"abcf2fbc6abgf"}).
withBody(@"{\"name\":\"foo\"}").
andReturn(201).
withHeaders(@{@"Content-Type": @"application/json"}).
withBody(@"{\"ok\":true}");

使请求失败

这将调用指定的错误处理程序(回调、代理...您的 HTTP 客户端使用的任何方式)。

stubRequest(@"POST", @"https://api.example.com/dogs.json").
withHeaders(@{@"Accept": @"application/json", @"X-CUSTOM-HEADER": @"abcf2fbc6abgf"}).
withBody(@"{\"name\":\"foo\"}").
andFailWithError([NSError errorWithDomain:@"foo" code:123 userInfo:nil]);

替换请求 stub

如果您需要更改单个请求的响应,只需重新 stub 请求即可

stubRequest(@"POST", @"https://api.example.com/authorize/").
andReturn(401);

// Some test expectation...

stubRequest(@"POST", @"https://api.example.com/authorize/").
andReturn(200);

意外的请求

如果执行了某个请求但没有被 stub,Nocilla 不会让该请求触及现实世界。在这种情况下,您的测试应该失败。目前,Nocilla 将抛出异常,其中包含有关错误及如何解决它的有意义的消息,包括如何 stub 未预料到的请求数的代码片段。

测试异步请求

在测试异步请求时,您的请求将会在一个不同于执行测试的线程上发送。这一点很重要,您需要考虑这一点,并按这种方式设计测试,以确保有足够的时间完成。例如,使用 XCTest 时的 tearDown() 以及使用 QuickNimble 时的 afterEach() 都会导致请求永远无法完成。

谁使用了 Nocilla。

提交 PR 以在此处添加您的公司!

其他选择

参与贡献

  1. 分叉它
  2. 创建您的功能分支
  3. 提交您的更改
  4. 推送到分支
  5. 创建新的 Pull Request