Objective-C
Quick
Nimble

Quick/NimbleをObjective-Cのテストコードで使う

More than 3 years have passed since last update.

はまったのでメモ。


必要なヘッダーが不足しています

サンプルコードを見ると、以下のようになっている。

https://github.com/Quick/Quick/blob/master/Documentation/QuickExamplesAndGroups.md

// Objective-C

#import <Quick/Quick.h>
#import <Nimble/Nimble.h>

QuickSpecBegin(DolphinSpec)

it(@"is friendly", ^{
expect(@([[Dolphin new] isFriendly])).to(beTruthy());
});

it(@"is smart", ^{
expect(@([[Dolphin new] isSmart])).to(beTruthy());
});

QuickSpecEnd

これをまねして、ごくシンプルに書いてみよう。

#import <Quick/Quick.h>

#import <Nimble/Nimble.h>

QuickSpecBegin(SampleSpec)

describe(@"Sample", ^{
it(@"比較", ^{
expect(@2).to(equal(@1)); // ←ここでコンパイルエラー
});
});

QuickSpecEnd

コンパイルできないじゃないですか。

SampleSpec.m:16:20: Definition of 'NMBExpectation' must be imported from module 'Nimble.Swift' before it is required

指示された通りに、ヘッダーを追加しましょう。

  #import <Quick/Quick.h>

+ #import <Nimble/Nimble-Swift.h>
#import <Nimble/Nimble.h>

無事にコンパイルが通りました。

(Assertionは失敗するコードです。)


XCodeのバージョンとQuick/Nimbleのバージョン

上述のエラーを考えているときに、このissueを発見。

[https://github.com/Quick/Quick/issues/269]

Swift1.1の環境(=XCode 6.2)では、Quick v0.2.xとNimble v0.3.xを使ってね、というはなし。

検証してみたが、XCode6.2(6C131e)において、

Quick v0.3.1とNimble v0.3.1で動作した。

(Quickのバージョンは、検証時のCocoaPods 最新版)

issueで取り上げられているコンパイルエラーは、Nimbleに関してなので、Quickは最新でも問題ないようである。