lundi 24 août 2015

test mysql query using pdo mock

I am testing a method involves execution of mysql query. I am using PDO mock (i created with jimbojsb/pseudo) and i wonder if there is a way for me to know which query executed in practice. this is my test:

public function testSave_idIsInitialized()
{
  $data = array('site' => 'Ad_1', 'placement' => 'great ad', 'device' => 'mobile', 'source' => 'origin',
              'campaign' => 'revCont','url' => 'http://walletgroove.com', 'country' => 'Israel', 'active' => '1', );
  $lastId = 10;
  $query  = "UPDATE rules SET site=:site, placement=:placement, device=:device, ";
  $query .= " source=:source, campaign=:campaign, url=:url, country=:country, dof_count=:dof_count, dof_idx=:dof_idx, active=:active ";
  $query .= " WHERE id=:id";

  $pdo = new Pseudo\Pdo();
  $r = new Pseudo\Result();
  $pdo->mock($query, $r);

  $fixture = new AdRule($data);
  $fixture->id = 1;
  $fixture->setDbh($pdo);
  $fixture->save();
}

and this is the method i am testing:

  function save() {
    $DBH = $this->getDbh();
    if (empty($this->id)) {
      //insert new
      $query  = "INSERT INTO rules (site, placement, device, source, campaign, url, country, dof_count, dof_idx, active)";
      $query .= " VALUES (:site, :placement, :device, :source, :campaign, :url, :country, :dof_count, :dof_idx, :active)";
      $arr = $this->toArray();
      unset($arr['id']);
      $stmt = $DBH->prepare($query);
      $stmt->execute($arr);
      $this->id = $DBH->lastInsertId();
    } else {
      //update
      $query  = "UPDATE rules SET site=:site, placement=:placement, device=:device, ";
      $query .= " source=:source, campaign=:campaign, url=:url, country=:country, dof_count=:dof_count, dof_idx=:dof_idx, active=:active ";
      $query .= " WHERE id=:id";
      $stmt = $DBH->prepare($query);
      $stmt->execute($this->toArray());
    }
  }

is there a way to check which of the queries was called?

Aucun commentaire:

Enregistrer un commentaire