はまったのでメモ。
必要なヘッダーが不足しています
サンプルコードを見ると、以下のようになっている。
// 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は最新でも問題ないようである。