我有一些重复的规格,我想干涸。通用功能不适合移动到beforeEach块中。本质上,它是对象创建,是12个对象中每个对象的4行,我想将这4行转换为一个函数调用。
在Kiwi规范中,我可以将助手函数放在哪里?
在RSpec中,我可以将def放在规范块之间,但在这里似乎不可能。我甚至尝试过跳过SPEC_END宏并自己添加该内容,这样我就可以从SPEC_BEGIN中添加@实现中的函数,但这似乎也不起作用。
校正..。我可以用手工编码SPEC_END宏来管理类似的工作。我把结局搞错了。但是,它还是失败了,因为该方法不在@interface中。
发布于 2012-08-03 18:09:36
将助手函数创建为SPEC_BEGIN之后的块:
SPEC_BEGIN(MySpec)
NSDate* (^dateFromString) (NSString *) = ^NSDate* (NSString *dateString) {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
[dateFormatter setDateFormat:@"MM-dd-yyyy"];
return [dateFormatter dateFromString:dateString];
};
describe(@"something", ^{
NSDate *checkDate = dateFromString(@"12-01-2005");
...
});
SPEC_END发布于 2012-12-21 20:59:11
您还可以在SPEC_BEGIN()作用域之上创建一个直接的C函数。
NSString *makeAString () {
return @"A String";
}或者,如果您有将跨多个Spec文件使用的助手函数,请将这些函数放在单独的文件中并导入标头。我发现这是一个很好的方法来清理我的规格。
发布于 2014-11-27 10:00:37
超级马林建议采用以下方法:
@implementation KWSpec(Additions)
+ (void)myHelperMethod:(Car*)car {
[[car shouldNot] beNil];
};
@end
SPEC_BEGIN(FooBarSpec)
describe(@"A newly manufactured car", ^{
it(@"should not be nil", ^{
[self myHelperMethod:[CarFactory makeNewCar]];
});
});
SPEC_END另一个选项是道格建议:
SPEC_BEGIN(FooBarSpec)
void (^myHelperMethod)(Car*) = ^(Car* car){
[[car shouldNot] beNil];
};
describe(@"A newly manufactured car", ^{
it(@"should not be nil", ^{
myHelperMethod([CarFactory makeNewCar]);
});
});
SPEC_END它的好处是它很适合异步场景:
SPEC_BEGIN(FooBarSpec)
__block BOOL updated = NO;
void (^myHelperAsync)() = ^()
{
[[expectFutureValue(theValue(updated)) shouldEventually] beYes];
};
describe(@"The updater", ^{
it(@"should eventually update", ^{
[[NSNotificationCenter defaultCenter] addObserverForName:"updated"
object:nil
queue:nil
usingBlock:^(NSNotification *notification)
{
updated = YES;
}];
[Updater startUpdating];
myHelperAsync();
});
});
SPEC_END最后,如果您的助手方法驻留在另一个类中,甘田建议进行一次巧妙的攻击:
@interface MyHelperClass
+(void)externalHelperMethod:(id)testCase forCar:(Car*)car
{
void (^externalHelperMethodBlock)() = ^(){
id self = testCase; //needed for Kiwi expectations to work
[[car shouldNot] beNil];
};
externalHelperMethodBlock();
}
@end
SPEC_BEGIN(FooBarSpec)
describe(@"A newly manufactured car", ^{
it(@"should not be nil", ^{
[MyHelperClass externalHelperMethod:self forCar:[CarFactory makeNewCar]];
});
});
SPEC_ENDhttps://stackoverflow.com/questions/11198428
复制相似问题