既に存在するGrailsアプリケーションにVue.jsを導入し、単一ファイルコンポーネントをNPMなどの外部ツールを使わずに擬似的に実現するワークアラウンド。
これが所謂Vue.jsの単一ファイルコンポーネントに相当。
templates/vue/_index.gsp
trait A{ | |
private Integer hoge = 0 | |
def inc() { | |
hoge+=1 | |
} | |
} | |
class B implements A {} | |
def obj1 = new B() |
// Factory? | |
interface DataStoreCreator { | |
def create() { | |
DataStore ds = factoryMethod() | |
} | |
abstract DataStore factoryMethod() | |
} | |
class ConcreteDatabaseCreator implements DataStoreCreator { | |
DataStore factoryMethod() { |
まず、前提条件として、GrailsでHTTPクライアントを利用する(もちろんテストも書く)。
この素晴らしい記事の中で、ForecastClient
というクラスがあって、その単体テストの書き方も詳細に述べられている。
ここで、今自分が疑問に思っているのが、このForecastClient
を利用するメソッドがあるとして、そのメソッドをどのようにUnitテスト書けばいいのか、という点。例えば以下の普通のGrailsのService。
@Transactional
class Hoge {
def some() {
下記コメント参照。 |
class UrlBuilderService { | |
def translationService | |
def hoge() { | |
println "start" | |
println translationService.debug() | |
println "end" | |
} | |
} | |
} |
// 通常のコード内 | |
int x = 100 | |
//クロージャーの定義 | |
Closure toDoubled = { | |
x *= 2 | |
} | |
assert x == 100 | |
toDoubled() |
def split = 2 | |
// 普通の再帰 | |
def clj1 = { List list -> | |
if(!list) {return []} | |
else [list.take(split)] + call(list.drop(split)) | |
} | |
// trampolineを使って末尾再帰最適化! | |
def clj2 = { List list, List result = [] -> |
2013/12 | |
Sun Mon Tue Wed Thu Fri Sat | |
01 02 03 04 05 06 07 | |
08 09 10 11 12 13 14 | |
15 16 17 18 19 20 21 | |
22 23 24 25 26 27 28 | |
29 30 31 01 02 03 04 |