忍者ブログ
[PR]
×

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



2024/03/29 14:21 |
Symfony1.4 11日目その3
http://www.symfony-project.org/jobeet/1_4/Doctrine/ja/11
Doctrineテスターとは、まあ要するにDBの中を覗いてくれるテスターです。
1
2
3
4
5
6
7
<?php
$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
<?php
$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
<?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.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()
;
>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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
  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
<?php
$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


2011/01/07 23:14 | Comments(0) | TrackBack() | PHP

トラックバック

トラックバックURL:

コメント

コメントを投稿する






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



<<今週の実績 2011/01/09 | HOME | iPhoneOS4.1 チェックボックスを作りたい>>
忍者ブログ[PR]