噂の新テスティングフレームワーク"Quick"を試してみよう！


「Quick」は去年リリースされた注目のテスティングフレームワーク。
Spec系統のフレームワーク(RSpecとか)を意識して作られているらしい。

Spec系については、RSpecについて調べてみると参考になるかも。
ただ、あまり深い追いすると際限ないのでほどほどに。。

Spec系の特徴を簡単にだけ。

* 読みやすい
* TDD(BDD)を意識した作りなっている

## 使ってみよう

### インストール

[Installing Quick](https://github.com/Quick/Quick/blob/master/Documentation/InstallingQuick.md#carthage) (公式)

「git」「CocoaPods」「Carthage」の３パターンあるっぽい。
※ Carthageがちょっと気になったので調べてみた→[[Swift] CocoaPodsとCarthageの違い](http://qiita.com/nori0620/items/b81ae171f0e82b0c2d8a)

普通にcocoapodsでやってみる。

#### 下準備

cocoapodsのバージョン0.36以上が必要とのこと。
なのでupdateから始める。

```
gem update cocoapods
```

アップデートされねー。。
→rbenv使ってて、違う"pod"を見にいってたせいだった。
 絶対パスを指定してインストールしたらいけた。

```
/path/to/.rbenv/versions/2.1.2/bin/pod --version
0.39.0
```


プロジェクトディレクトリ直下にPodfileを作成

```
cd path/to/project
pod init
```


```Podfile
# Podfile

use_frameworks!

def testing_pods
    pod 'Quick', '~> 0.3.0'
    pod 'Nimble', '~> 1.0.0'
end

target 'MyTests' do
    testing_pods
end

target 'MyUITests' do
    testing_pods
end
```
(Xcode7を使ってる場合は、依存関係が違うのでインストールガイド参照)

#### Quickをインストール

```
cd /path/to/project #Podfileがある場所
/path/to/.rbenv/versions/2.1.2/bin/pod install
```

成功。


### さっそく使ってみる

#### プロジェクトを開き直す

```
open ProjectName.xcworkspace
```
※ 拡張子がxcworkspaceの方

#### テストファイルを作成

作成方法はまあ普通の方法なのでここでは割愛。
下記のように編集。

```
//
//  SampleProjectTests.swift
//  SampleProjectTests
//
//  Created by xxxx on 2015/10/06.
//  Copyright (c) 2015年 xxxxx xxxx. All rights reserved.
//

import Quick
import Nimble

class SampleSpec: QuickSpec {
    override func spec() {
        var subject: SampleModel?
        
        describe("sample spec") {
            beforeEach {
                subject = SampleModel()
            }
            it("1+1 = 2") {
                expect(subject!.plus(1,y:2)).to(equal(3))
            }
        }
    }
}
```

#### テスト実施してみる

対応するモデル(SampleModel)を作成して、
Command + U でテスト実施。Test Succeeded!


これにて導入編おわり。
今後、Quickを実際の開発で使ってみていろいろ分かってきたところで記事にしたい。

#### 2015.10.28 追記:

ある時からビルド中にエラーが出るようになった...
なんか変に設定をいじったのかと思い、新プロジェクトでやってみても同内容。

```
PhaseScriptExecution Copy\ Pods\ Resources /Users/xxx/Library/Developer/Xcode/DerivedData/xxxx-bjpxnqpvdyszngffgeohdjxdcwzp/Build/Intermediates/xxxx.build/Debug-iphonesimulator/xxxx.build/Script-B42B74452C7AEE882C20D09C.sh
    cd /Users/xxx/iphoneapp/xxxx
    /bin/sh -c /Users/xxx/Library/Developer/Xcode/DerivedData/xxxx-bjpxnqpvdyszngffgeohdjxdcwzp/Build/Intermediates/xxxx.build/Debug-iphonesimulator/xxxx.build/Script-B42B74452C7AEE882C20D09C.sh

/Users/xxxx/Library/Developer/Xcode/DerivedData/xxxx-bjpxnqpvdyszngffgeohdjxdcwzp/Build/Intermediates/xxxx.build/Debug-iphonesimulator/xxxx.build/Script-B42B74452C7AEE882C20D09C.sh: line 2: /Users/xxx/iphoneapp/xxxx/Pods/Target Support Files/Pods-xxxx/Pods-xxxx-resources.sh: No such file or directory
```

お分かりいただけるだろうか。。。
なにやらシェルの実行でコケてるらしい。

[類似事例](http://appstars.jp/archive/433)
似てるけど、ちょっと違う。。。と思っていろいろいじってたら分かりました！

##### 発生原因

Podfileの書き方がまずってたみたい。

```
use_frameworks!

def testing_pods
    pod 'Quick', '~> 0.3.0'
    pod 'Nimble', '~> 1.0.0'
end

target 'ProjectName' do
	
end

target 'ProjectNameTests' do
    testing_pods
end
```

テストじゃない方のターゲットにインストールっていらなくね？ってなったあと
単純に”testing_pods”を消した上記の状態にしてました。。
この状態で```pod install```すると通常はresource copyシェルスクリプトを作成してくれるところが空だとシェルスクリプトを作成しないらしい(まあコピーする対象がないので当たり前なんですが。。。)

ただ、xcodeのビルド時にはそのシェルがあるものとして呼びに行っちゃってコケるという運びでした。

##### 対応方法

Podfileからtestsじゃない方のターゲットに対する記述を消して再度pod install
（ビルド設定で回避できるのかもしれないけど、よく分からない。。。）

超初心者で見様見真似で作業してるとハマる人もいるかもと思い、メモ。