http://www.symfony-project.org/jobeet/1_4/Doctrine/ja/11
Doctrineテスターとは、まあ要するにDBの中を覗いてくれるテスターです。
ってやったらJobeetJob.id=1のレコードが存在するかチェックしてくれます。
ちなみに全くどうでもいいですが、テスター名は別の値にもできます。
/test/functional/frontend/jobActionsTest.php
これを使って登録が実際になされているかのテストを行ってみましょう。
/test/functional/frontend/jobActionsTest.php
>php test/functional/frontend/jobActionsTest.php
> 3 - Post a Job page
> 3.1 - Submit a Job
# get /job/new
ok 1 - request parameter module is job
ok 2 - request parameter action is new
# post /job
ok 3 - request parameter module is job
ok 4 - request parameter action is create
ok 5 - page redirected to /index.php/job/edecd17758c04b467ff2cadfc4c5a2c82685efbf
ok 6 - request parameter module is job
ok 7 - request parameter action is show
ok 8 - JobeetJob objects that matches the criteria have been found
click()で新たな投稿を保存した後、データベースにcompany='Sensio Labs'、email='for.a.job@example.com'、is_public=falseの値が入っているレコードが存在するかを調べています。
投稿に成功していたら当然その値が該当するのでテストには成功します。
ちなみにis_publicが0でも""でも成功したので==による比較のようです。
SQLを発行してるんじゃないのか?
今回データベースに値を登録するテストを何回も作りましたが、これをメソッドを分けて簡単に呼び出せるようにしましょう。
/lib/test/JobeetTestFunctional.class.phpにメソッドを追加します。
/lib/test/JobeetTestFunctional.class.php
以後はこのメソッドを呼び出すだけで新規記事を投稿→リダイレクト後のページへの移動を行ってくれます。
試してみましょう。
/test/functional/frontend/jobActionsTest.php
>php test/functional/frontend/jobActionsTest.php
> 3.25 - JobeetTestFunctional::createJob
# get /job/new
# post /job
ok 1 - JobeetJob objects that matches the criteria have been found
'location'が'hoge'のエントリが作成されました。
もちろん引数無しで呼び出せばデフォルト値のデータが作成されます。
今後新エントリがほしくなれば$browser->createJob()と書くだけでいいようになりました。
Doctrineテスターとは、まあ要するにDBの中を覗いてくれるテスターです。
1
2
3
4
5
6
7
|
$browser->setTester('doctrine', 'sfTesterDoctrine');
$browser->with('doctrine')->begin()->
check('JobeetJob', array(
'id' => '1',
))->
end();
|
ってやったらJobeetJob.id=1のレコードが存在するかチェックしてくれます。
ちなみに全くどうでもいいですが、テスター名は別の値にもできます。
/test/functional/frontend/jobActionsTest.php
1
2
3
4
5
6
7
|
$browser->setTester('hoge', 'sfTesterDoctrine');
$browser->with('hoge')->begin()->
check('JobeetJob', array(
'id' => '1',
))->
end();
|
これを使って登録が実際になされているかのテストを行ってみましょう。
/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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
//記事新規作成
$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.jpg',
'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,
'type' => 'freelance',
)))->
with('request')->begin()->
isParameter('module', 'job')->
isParameter('action', 'create')->
end()->
with('response')->isRedirected()->
followRedirect()->
with('request')->begin()->
isParameter('module', 'job')->
isParameter('action', 'show')->
end()->
with('doctrine')->begin()->
check('JobeetJob', array(
'company' => 'Sensio Labs',
'email' => 'for.a.job@example.com',
'is_public' => false,
))->
end()
;
|
> 3 - Post a Job page
> 3.1 - Submit a Job
# get /job/new
ok 1 - request parameter module is job
ok 2 - request parameter action is new
# post /job
ok 3 - request parameter module is job
ok 4 - request parameter action is create
ok 5 - page redirected to /index.php/job/edecd17758c04b467ff2cadfc4c5a2c82685efbf
ok 6 - request parameter module is job
ok 7 - request parameter action is show
ok 8 - JobeetJob objects that matches the criteria have been found
click()で新たな投稿を保存した後、データベースにcompany='Sensio Labs'、email='for.a.job@example.com'、is_public=falseの値が入っているレコードが存在するかを調べています。
投稿に成功していたら当然その値が該当するのでテストには成功します。
ちなみにis_publicが0でも""でも成功したので==による比較のようです。
SQLを発行してるんじゃないのか?
今回データベースに値を登録するテストを何回も作りましたが、これをメソッドを分けて簡単に呼び出せるようにしましょう。
/lib/test/JobeetTestFunctional.class.phpにメソッドを追加します。
/lib/test/JobeetTestFunctional.class.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public function createJob($values = array()){
return $this->
get('/job/new')->
click('Preview your job', array('job' => array_merge(array(
'company' => 'Sensio Labs',
'url' => 'http://www.sensio.com/',
'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,
'type' => 'freelance',
), $values)))->
followRedirect()
;
}
|
以後はこのメソッドを呼び出すだけで新規記事を投稿→リダイレクト後のページへの移動を行ってくれます。
試してみましょう。
/test/functional/frontend/jobActionsTest.php
1
2
3
4
5
6
7
8
9
|
$browser->info(' 3.25 - JobeetTestFunctional::createJob')->
createJob(array('location'=>'hoge'))->
with('doctrine')->begin()->
check('JobeetJob', array(
'location' => 'hoge',
))->
end()
;
|
>php test/functional/frontend/jobActionsTest.php
> 3.25 - JobeetTestFunctional::createJob
# get /job/new
# post /job
ok 1 - JobeetJob objects that matches the criteria have been found
'location'が'hoge'のエントリが作成されました。
もちろん引数無しで呼び出せばデフォルト値のデータが作成されます。
今後新エントリがほしくなれば$browser->createJob()と書くだけでいいようになりました。
PR
トラックバック
トラックバックURL: