11031


Quickを使ってテストがうまくいきません。どうしてでしょうか？

ボタンを押すとラベルに「Hello」と表示する機能をテストしたいのです。

## 作業環境

  * Mac OS X 10.10
  * Xcode 6.3.2 (Swift 1.2)

## StoryBoard

![StoryBoard](https://i.stack.imgur.com/u3Xpl.png)

上のラベルオブジェクト「????」が`myLabel`です。  
下のボタンオブジェクト「Button」が`myButton`です。

## テスト対象のViewController

[code]

    import UIKit
    
    class ViewController: UIViewController {
        @IBOutlet weak var myLabel: UILabel!
        @IBOutlet weak var myButton: UIButton!
        override func viewDidLoad() {
            super.viewDidLoad()
        }
        @IBAction func pushButton(sender: AnyObject) {
            self.myLabel.text = "Hello"
        }
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
    }
    
[/code]

## テストの内容

[code]

    import UIKit
    import Quick
    import Nimble
    import TestApp
    
    class ViewControllerSpec: QuickSpec {
        override func spec() {
            var vc : ViewController!
            beforeEach{
                vc = ViewController()
            }
            describe("ボタンを押す") {
                beforeEach{
                    vc.beginAppearanceTransition(true, animated: false)
                    vc.endAppearanceTransition()
                }
                it("myLabelのtextが変わる") {
                    vc.myButton?.sendActionsForControlEvents(UIControlEvents.TouchUpInside)
                    expect(vc.myLabel?.text).to(equal("Hello"))
                }
            }
        }
    }
    
[/code]

## テスト結果

> failed - expected to equal , got (user beNil() to match nils)

`vc.beginAppearanceTransition(true, animated: false)` と
`vc.endAppearanceTransition()` によって、`viewDidAppear`
されているので、`vc.myLabel`には`nil`が含まれないという認識なんですが、どうして`got <nil>`と返ってくるのかわかりません。

教えてください。よろしくお願いします。


CC BY-SA 3.0
2015-06-05T02:19:46.530
10991
2015-06-06T04:42:47.357
277
question
ios swift
SwiftとQuickを使って、ボタンを押すとラベルの表示が変わるUIテストをしたい


`myLabel`および`myButton`はStoryBoardによって設定されるので、`vc =
ViewController()`のようにStoryBoardを使わずに直接クラスをインスタンス化しているため、`nil`のままなのです。

ビューコントローラをインスタンス化しているところをStoryBoardからインスタンス化するように変えれば動くと思いますよ。

[code]

    vc = UIStoryboard(name: "Main", bundle: NSBundle(forClass: ViewController.self)).instantiateInitialViewController() as! ViewController
    
[/code]


CC BY-SA 3.0
2015-06-06T04:42:47.357
11031
2015-06-06T04:42:47.357
5519
10991
answer