*

Titanium Mobile応用【JasmineとTiShadowでBDD編:15桁入力処理】

公開日: : 最終更新日:2014/05/26 CoffeeScript, Titanium ,


スポンサードリンク



前回の続きで、「BDD編その3」です。
「BDD編その1」
「BDD編その2」をまずはご参照ください。

いきなりですが、前回のエントリーがBDDになっていなかったことをお詫びいたします。
完全なるTDDですよね・・・、当然、偽装ではありません。担当者のミスです。

と、気を取り直して・・・
今回は、各数字ボタンが複数回押された部分のBDDを行います。

BDDなのでテストケースを最初に完成させ、そのテストが通るように計算機アプリを修正していきます。

今回の作業手順は以下の通りです。

  1. 前回作成したテストケースのリファクタリング
  2. 2桁の数値が正しく入力できることの検証テストケースの実装
  3. 15桁の数値が正しく入力できることの検証テストケースの実装
  4. 15桁入力済みの時に数値ボタンが押されたときのテストケースの実装
  5. テストケースが成功するように計算機アプリを修正

 

1 前回作成したテストケースのリファクタリング

テストのヘルパーメソッドの作成と呼び出し

$.__viewsに対してHTMLのDOMの走査の様なことができないようなので、
数字のボタンのIDの配列を宣言しておき、その配列のインデックス指定で数値ボタン
を参照してボタンのクリックとテストケースの実行を行うテストのヘルパーメソッドを作成し、
各テストケースをこのヘルパーメソッド経由で実行するように変更しました。

beforeEach文の追加

ボタンのクリックテストスイートの実行前のbeforeEachで入力値をクリアする処理を追加しました。

変更後のindex_spec.coffeは以下のようになりました。

念のためテストのコンパイルと実行をして正しく動作するか確認します。

結果は以下のようになりました。

 

テストは成功しましたが、たまに失敗することがあるんですよね・・・、itの実行前にbeforeEachが
呼び出されないor TiShadowが非同期でテストを実行しているのかわからないのですが・・・
例えば8ボタンを押したときに、入力結果が78となりテストが失敗することが稀にあります。
でも再度実行すると同じテストケースが成功するので、決定的にTiShadowとJasmine
を併用した時のバッドノウハウ(グッドかも)があって、それが考慮できていないのかもしれません・・・

といまいち釈然としない思いで、再度index_spec.coffeを見直したのですが、
もっと綺麗にするポイントがありますね・・・
テストケースのitに渡す文字列とtestNumButtonClickに渡す数値が異なるだけですね
両方とも押したボタン(属性:title)から生成できるのでは,と思い再度変更を行いました。
index_spec.coffeは以下のようになりました。

当然、テストを実行して確認!、OKです。なお、同じコマンドと結果の繰り返しになるので省略させて頂ます。

2 2桁の数値が正しく入力できることの検証テストケースの実装

まずは、testNumButtonClickの引数にpreInputValue
(既に入力されていた数値の文字列)を追加します。testNumButtonClickメソッドは以下のようになりました。

ここのtestNumButtonClickメソッドの書き換えで気づいたのですが、
itメソッドはスレッドセーフ(いい表現が無いです。一番これがしっくりきます。)
でないようです。for文で参照しているインデックスをifメソッドの実行コールバックで参照する場合
値が意図しないものとなってしまします。
具体的にはitからコールバックが呼び出される時点ではインデックスは回りきっている
とのことです。いまいち説明がうまくできてないですが、またどこかのタイミングで
この事象に対するエントリーを書きたいと思います。

本筋に戻って、テストスイートの数値ボタンのクリック(2回目以降)を追加し、
beforeEachに入力済み値をセットする処理を追加します。入力済みの値は1とします。
index_spec.coffeはこの時点で以下のようになります。

 

このテストに加えて、0をタップした後に1をタップした場合は”1″が入力されたとする。
また同様に0→0は”0″が入力されたものとするのが計算機では一般的なので、
このテストケースを追加します。
「数値ボタンのクリック(2回目以降)」テストスイートに

を追加します。 以上で「2桁の数値が正しく入力できることの検証テストケースの実装」が終了しました。

3 15桁の数値が正しく入力できることの検証テストケースの実装

14桁入力された状態で数値ボタンをタップするとのテストを追加します。
新しいテストスイートを追加しfor文でtestNumButtonClickを呼び出すだけです。

 

4 15桁入力済みの時に数値ボタンが押されたときテストケースの実装

15桁入力された状態で数値ボタンをタップするとのテストを追加します。
具体的には

inputMaxLengthとmaxInputDummyDataを追加

inputMaxLength=15と、maxInputDummyData=”123456789012345″の変数を追加

testNumButtonClickの処理を変更

preInputValueが15桁のときの検証方法の分岐を追加

テストスイートの追加

15桁入力済み時に各数値ボタンがタップされたときのテストケースを追加
実際にはfor文を回して、修正したtestNumButtonClickを呼び出します。
となります。

変更後のindex_spec.coffeeは以下のようになります。

これで数値ボタンタップ時のspecが完成しました。

5 テストケースが成功するように計算機アプリを修正

テストが通るように計算機アプリを修正しますが、まずは入力済みの数値と
押された数値ボタンを連結した文字列を表示するように修正を行います。
修正後のindex.coffeeは以下のようになります。

計算機アプリの修正を行ったので反映とテストの実行を行います。

実行結果は以下のようになりました

長くなってきたので見にくいですが
X 0→1は1が入力結果となる
X 0→1は1が入力結果となる
数値ボタンのクリック(15桁入力済み時)のテストスイート
のテストケースが失敗しています。index.coffeeの実装からは当然の結果です。

失敗したテストケースも通るようにindex.coffeeを修正します。
修正後のindex.coffeeは以下の通りです。

 

計算機アプリとテストの実行を行います。

 

実行結果は以下のように変わりました。

修正前に失敗していたテストケースが全て成功していることが確認できます。

以上で各数字ボタンが複数回押された部分のBDDが終了しました。
次回は、足し算の部分のBDDのエントリーを作成したいと思います。

Titanium Mobile応用【計算機アプリBDD編その4】に続く。


スポンサードリンク

Googleアドセンス

Googleアドセンス




関連記事

Titanium Mobile入門【導入編】

スマホでアプリを開発すべくTitanium Studioの動作環境を作成し、Default Allo

記事を読む

no image

Titanium Mobile応用【JasmineとTiShadowでBDD編:テストが時々失敗する理由】

前回の最後に残った問題点の解決方法が分かりましたので 「BDD編その5」として記載させていただきま

記事を読む

Titanium Mobile入門【TiShadow導入編】

Androidだと格段に作業が早くなる。 複数のエミューレータで同時にテストを実行できる

記事を読む

no image

Titanium Mobile入門【TiShadow活用編】

「Titanium Mobile入門【TiShadow導入編】」ではTiShadowの導入と接続用の

記事を読む

Titanium Mobile応用【JasmineとTiShadowでBDD編:対象アプリ説明】

本格的にTitanium Mobile CLIを利用してBDDを行いたいと思います。 まずは、計算

記事を読む

Titanium MobileのAlloyにおけるUIコンポーネントの配置【後編】

Titanium MobileのAlloyにおけるUIコンポーネントの配置【前編】 に引き続き T

記事を読む

TitaniumのTableViewを試してみる【何故か前編】

Mac miniの環境が完成したので、新たなTitaniumを利用したBDDシリーズを開始する予定で

記事を読む

no image

Titanium mobileでAndroidのActionBarを利用する。

Titanium mobileで基本的な画面遷移を試そうと思い、画面遷移のイベントを仕込むボタンをど

記事を読む

Titanium Mobile応用【JasmineとTiShadowでBDD編:数値ボタンの1回押し処理】

前回の続きで、「BDD編その2」です。 BDD編その1をまずはご参照ください。 今後のBDD

記事を読む

no image

Titanium mobileでiPhoneのNavigationBarを利用する。

Titanium mobileで基本的な画面遷移を試そうと思い、画面遷移のイベントを仕込むボタンをど

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

動画で英語を学習できるiOSの無料アプリCapTubeをリリースいたしました。

個人では初となるiOSアプリをリリースいたしました。 何度もリジ

no image
Ruby on rails4系でBootstrapを利用するためのtips

MacでRuby on rails4系のBootstrapを利用しよう

no image
Java、Eclipse、JUnit関連のエントリーの移行のお知らせ

Java、Eclipse、JUnit関連のエントリーは http:/

iOS8開発者向けお勧め本紹介[詳細! Swift iPhoneアプリ開発 入門ノート Swift 1.1+Xcode 6.1+iOS 8.1対応]

iOS7開発者向けお勧め本紹介を以前に紹介させていただきまいたが、今回

Swift入門(Xcode6のXCTestフレームワークで学ぶ) 第二回「関数(メソッド)とクロージャーの利用方法」

前回はSwiftの概要をザックリと説明させていただきました。 今

→もっと見る

Optimization WordPress Plugins & Solutions by W3 EDGE
PAGE TOP ↑