我正在寻找一种测试嵌套对象属性的方法。本质上,我有一个规范,它将验证我们从外部服务返回的结果。由于我不想为要测试的每个示例对服务进行大量调用,因此在规范开始时发出一次请求,然后我们一组期望验证响应。
最好用代码示例进行解释(显然,它不能按预期工作):
beforeAll(^{
wait = [self waitFor:^(id handler) { [session.account all:handler]; }];
accounts = wait.result;
});
it(@"should make a successfull request", ^{
[[wait should] beSuccessful];
});
it(@"returns a non-nil list of accounts", ^{
[[accounts shouldNot] beNil];
});
it(@"should have at least 1 account", ^{
[[[accounts.accounts should] haveAtLeast:1] account];
});
context(@"each account", ^{
for (Account* account in accounts.accounts) {
it(@"should have a name", ^{
[[account.name shouldNot] beEmpty];
});
it(@"should have an accountID", ^{
[[account.accountID shouldNot] equal:@"bla"];
});
}
});
});
这是我感兴趣的“每个帐户”上下文。基本上,调用返回一组帐户,我想要每个帐户的有效性。
我可以把它转过来并在 it() 块中设置循环,这有点工作,但它并没有告诉我哪个项目有问题,并且所有验证器都在一个有问题的项目之后运行(例如,当遇到 nil account.name ) 返回Trying to add another verifier without specifying a matcher for the previous one.
错误。所以,不是很实用。
我考虑只测试返回的 json,因为我们还有一组规范用于(单元)测试我们自己的组件,而不管我们从服务获得的响应如何。但这不起作用,因为我们并不真正关心确切的数据集(也很容易改变),只是格式应该是正确的。
在使用本地测试数据编写规范时,我会为层次结构中的每个级别编写几个规范,但我想把它放在一起:我想完整地测试从服务器收到的一个响应。
我已经尝试通过在测试运行时添加更多 KWExamples 来动态执行此操作,但这似乎不起作用。
有什么想法(或者我是否将它误用于不打算做的事情)?
(也发布为 Github 问题:https ://github.com/allending/Kiwi/issues/435 )