PHP UNIT TEST - $ _POST在保存到数据库时返回空值

时间:2016-01-28 18:58:27

标签: phpunit

我是php和phpunit测试用例的新手。我试图编写一个测试用例,在测试用例中使用$ _POST将值保存到数据库中。当我执行测试用例时,POST返回空值。请帮助如何在php单元测试中使用$ _POST变量。

TEST CLASS-

  public function setUp() {
      $this->resetInstance();
      $this->CI->load->model('save_data_model');
      $this->obj = $this->CI->save_data_model; 
  }  

 public function test_SaveData()
  {              
    $_SERVER['REQUEST_METHOD'] = 'POST';
    $_POST = array('value1'=>'10','value2'=>'100');     
    $actual = $this->obj->SaveData('1');
    $this->assertNotNull($actual);
   }

  }

     MODEL  -

    public function SaveData($id)
    {
        $sql['value1'] = $_POST['js_data']['input_value1'];
        $sql['value2'] = $_POST['js_data']['input_value1'];
        $sql['id'] = $id;

        if(!empty($id))
            {
                $this->db->where('id',$id);

                if($this->db->update('table_name',$sql))
                {
                    return 'Updated';
                }
                else
                {
                    return 'Not Updated';
                }
            }
    }

    Severity: NoticeMessage:  Undefined index: js_dataFilename in SaveData.php
    Database error: A Database Error Occurred

    NULL VALUE FOR value1
    UPDATE `table_name` SET `value1` = NULL, `value2` = NULL
    WHERE `id` = '1'

1 个答案:

答案 0 :(得分:1)

我看到你是一个phpunit /测试新手。这是一件好事。

您正在设置$ _POST [&#39; value1&#39;]但您打算在模型中检索$ _POST [&#39; js_data&#39;] [&#39; input_value1&#39;]。< / p>

但是,除此之外,我可以给你一些建议:

1)不要在你的模特中使用$ _POST 2)为模型的属性声明公共变量(例如public $ value1; public $ id; ...) 3)然后,在您的测试中,您应该设置:$ this-&gt; obj-&gt; value1 =&#39; xxxx&#39 ;; ..... 4)然后用断言检查输出。 SaveData将在您编写的函数中返回一个字符串。总是。所以你应该尝试使用assertEquals 5)您可以将assertNotNull作为辅助断言,因为您的代码可以更改。测试你的代码应该是什么,不应该做什么是一个好习惯。

顺便说一下,您应该尝试更多地了解模型的含义。不断改进。