2

CakePHP は初めてで、最初のテストを書き始めたところです。通常、Ruby on Rails を行う場合、Controller::create アクションをテストするための私のアプローチは、create アクションを呼び出し、その呼び出しの前後でモデルの数を比較して、1 増加したことを確認することです。

他の方法でこれをテストする人はいますか?

CakePHP の ControllerTest からモデルにアクセスする簡単な (組み込みの) 方法はありますか? ソースに何も見つかりませんでした。コントローラーを介してアクセスするのは間違っているようです。

4

3 に答える 3

1

私は最終的に次のようなことをしました:

class AbstractControllerTestCase extends ControllerTestCase {
  /**
   * Load models, to be used like $this->DummyModel->[...]
   * @param array
   */
  public function loadModels() {
    $models = func_get_args();
    foreach ($models as $modelClass) {
      $name = $modelClass . 'Model';
      if(!isset($this->{$name})) {
        $this->{$name} = ClassRegistry::init(array(
          'class' => $modelClass, 'alias' => $modelClass
        ));
      }
    }
  }
}

次に、私のテストはから継承しAbstractControllerTestCase、呼び出し$this->loadModels('User');setUp、テストで次のようなことを行うことができます:

$countBefore = $this->UserModel->find('count');
// call the action with POST params
$countAfter = $this->UserModel->find('count');
$this->assertEquals($countAfter, $countBefore + 1);
于 2013-09-09T11:46:06.927 に答える
1

私はCakePHPは初めてですが、この質問でここに来たことに注意してください。これが私がやったことです。

私は @amiuhle からアイデアを得ましたが、http://book.cakephp.org/2.0/en/development/testing.htmlsetUpのモデル テストで言及されているように、で手動で行うだけです。

public function setUp() {
    $this->Signup = ClassRegistry::init('Signup');
}

public function testMyTestXYZ() {
    $data = array('first_name' => 'name');
    $countBefore = $this->Signup->find('count');
    $result = $this->testAction('/signups/add',
        array(
            'data' => array(
            'Signup' => $data)
        )
    );
    $countAfter = $this->Signup->find('count');
    $this->assertEquals($countAfter, $countBefore + 1);
}
于 2014-02-12T01:21:41.967 に答える