14

乾燥させたい繰り返しの仕様がいくつかあります。beforeEach共通の機能は、ブロックへの移動には向いていません。基本的に、これはオブジェクトの作成であり、12 個のオブジェクトごとに 4 行です。この 4 行を 1 つの関数呼び出しに変換したいと考えています。

Kiwi 仕様のどこにヘルパー関数を配置できますか?

RSpec ではdefspec ブロックの間に入れることができますが、ここではそれができないようです。SPEC_END@implementation from 内に関数を追加できるように、マクロをスキップしてそのコンテンツを自分で追加しようとしましSPEC_BEGINたが、それもうまくいかないようです。

訂正SPEC_END...マクロを手作業でコーディングすることで機能するものを管理できます。最後に } を間違えました。それでも、メソッドが にないため、失敗します@interface

4

3 に答える 3

34

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-08-03T18:09:36.790 に答える
8

SPEC_BEGIN()スコープ の上にストレート C 関数を作成することもできます。

NSString *makeAString () {
    return @"A String";
}

または、複数の Spec ファイルで使用されるヘルパー関数がある場合は、これらの関数を別のファイルに配置し、ヘッダーをインポートします。これは、スペックをクリーンアップするための優れた方法であることがわかりました。

于 2012-12-21T20:59:11.560 に答える