忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2017/12/17 05:45 |
Symfony1.4 11日目
前回の続き


とりあえず1.4にバージョンアップした。
http://www.symfony-project.org/tutorial/1_4/ja/upgrade


フォームのテストを行います。
http://www.symfony-project.org/jobeet/1_4/Doctrine/ja/11
のっけから疎結合が云々よくわからないことを言ってますがどうせ使うことはないのでいいです。
Symfonyの部品を使うくらいならZFを使った方が楽でしょう。
まあsfFormが使えれば楽かもしれませんが使い方がわからん。


まず作成するのは新規記事作成ページを取得するメソッドチェーン。
test/functional/frontend/jobActionsTest.php
1
2
3
4
5
6
7
8
9
10
11
<?php
  //記事新規作成
  $browser->info('3 - Post a Job page')->
  info('  3.1 - Submit a Job')->
 
  get('/job/new')->
  with('request')->begin()->
    isParameter('module', 'job')->
    isParameter('action', 'new')->
  end()
;

http://symfony.localhost/frontend_dev.php/job/new
のリンクに行ったらjobモジュールのnewアクションが起動するよ、という内容です。
早速実行してみます。

>php test/functional/frontend/jobActionsTest.php

> 3 - Post a Job page
>   3.1 - Submit a Job
# get /job/new
ok 16 - request parameter module is job
ok 17 - request parameter action is new


正しく動作したようです。
次に、フォームに値を突っ込むテストをしてみます。
なんか複数の事柄がまとめて書かれているのでいまいちわかりづいらいんですが、順番に見ていきます。

>より明確にするために、JobeetJobForm の configure() メソッドの終わりで
>次のコードを追加することでフォーマットを job[%s] に変更してみましょう:

lib/form/doctrine/JobeetJobForm.class.php
1
2
<?php
  $this->widgetSchema->setNameFormat('job[%s]');

これはフォームのフィールド名を変えます。
デフォルトではフィールド名はフォームクラス名そのまま、
1
<input type="text" name="jobeet_job[company]" id="jobeet_job_company" />

となっています。
setNameFormat()を実行することで任意のフィールド名に変更することができます。
上記の場合、
1
<input type="text" name="job[company]" id="job_company" />

となります。
なにが明確になるのかはよくわからないのですが。

>すでにリンクのクリックをシミュレートするために click() メソッドを使いました。
>同じ click() メソッドはフォームを投稿するために使うことができます。
>フォームに関して、メソッドの2番目の引数としてそれぞれのフィールドに対して投稿する値を渡すことができます。
>実際のブラウザーのように、ブラウザーオブジェクトはフォームのデフォルト値と投稿された値をマージします。

何度読んでも意味がわかりませんが、click()メソッドに値を突っ込めば$_REQUESTに追加されるよ、という意味のようです。
$_GETなのか$_POSTなのかはいまいちわかりません。

test/functional/frontend/jobActionsTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
  //記事新規作成
  $browser->info('3 - Post a Job page')->
  info('  3.1 - Submit a Job')->
 
  get('/job/new')->
  with('request')->begin()->
    isParameter('module', 'job')->
    isParameter('action', 'new')->
  end()->
 
  click('Preview your job', array('job' => array(
    'company'      => 'Sensio Labs',
    'url'          => 'http://www.sensio.com/',
    'logo'         => sfConfig::get('sf_upload_dir').'/jobs/sensio-labs.gif',
    'position'     => 'Developer',
    'location'     => 'Atlanta, USA',
    'description'  => 'You will work with symfony ',
    'how_to_apply' => 'Send me an email',
    'email'        => 'for.a.job@example.com',
    'is_public'    => false,
  )))->
 
  with('request')->begin()->
    isParameter('module', 'job')->
    isParameter('action', 'create')->
  end()->
;

新規記事作成ページを取得し、[job]フォームの各フィールドに値を記入し、「Preview your job」のリンクをクリックするとjobアクションのcreateメソッドが動きますよ、の意味となります。
実行してみましょう。

>php test/functional/frontend/jobActionsTest.php

Parse error: syntax error, unexpected ';', expecting T_STRING or T_VARIABLE or '{' or '$' in \symfony\test\functional\frontend\jobActionsTest.php on line 91

お。
なんか最後がend()->;ってなってるせいです。
end();にすると実行に成功します。

>php test/functional/frontend/jobActionsTest.php
> 3 - Post a Job page
>   3.1 - Submit a Job
# get /job/new
ok 16 - request parameter module is job
ok 17 - request parameter action is new
# post /job
ok 18 - request parameter module is job
ok 19 - request parameter action is create

ちなみに投稿したデータは挿入に成功すれば実際に保存されます。
ただし、バリデータやフィールドをチェックしておらず、'logo'=>'a'とか'hoge'=>'fuga'とかありえないデータを突っ込んでもテストに通ってしまいます。

あとテストを実行するたびにjobeet_testのデータが総刷新されるんだがなんだこれ。
PR


2010/12/17 22:54 | Comments(0) | TrackBack(1) | PHP

トラックバック

トラックバックURL:
前回の続き。 http://www.symfony-project.org/jobeet/1_4/Doctrine/ja/11 前回のテストは、フォームにどんな適当な値があっても気にしないというあまり意味のないテストでした。 当然ですが実際にフォームの投稿が有効かどうかを確認するテストを行うことができます。 まずはフォームテスター。 コードだけ書いてあって何処に挿入するの?って感じですが、click()の直後に挿入します。たぶん。 /test/functional/fro...
弱小PHPerの憂鬱 | 2010/12/27 22:43

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<今週の実績 2010/12/19 | HOME | シヴィライゼーションレボリューション 難易度天帝でテクノロジー勝利>>
忍者ブログ[PR]