Codeigniter测试 - 调用非对象上的成员函数

时间:2014-04-02 09:51:38

标签: php codeigniter testing simpletest

我正在尝试使用simpletest测试我的codeigniter系统,但是我不断收到错误。我是PHP和codeigniter的新手,所以请放心。

   Fatal error: Call to a member function add() on a non-object in C:\xampp\htdocs\di2\application\tests\simple_test.php on line 35 

这是我的测试文件,目前我正在尝试将新用户添加到数据库中。

require_once BASEPATH."core/Model.php";
require_once APPPATH."models/Users_model.php";

class ExampleTest extends UnitTestCase
{

function ExampleTest()
{
    parent::__construct('Example tests');
}

///// All functions starting with "test" will be tested /////

function testSimpleStuff()
{
    $name = 'Andreas';
    $online = TRUE;

    $this->assertEqual($name, 'Andreas');
    $this->assertTrue($online);
}


//There are already 8 members in the table
function testAdd()
{
    $this->model->add("new member");
    $this->assertEqual($this->model->get(9),'new member');
    $this->assertNull($this->model->get(0));
    $this->assertNull($this->model->get(10));
}   

  }

这是我打电话的模型:

class Users_model extends CI_Model 
{

    function __construct() 
    {        
        parent::__construct();
    }

    //Used to retrieve all of the members from the database and list them by their id in descending order
    function get($id = null) 
    {
        $this->db->select('id, first_name, last_name, dob, email_address, phone_number, address_line_1, address_line_2, town, county, postcode, student, volunteer');
        $this->db->from('Users');
        if (!is_null($id)) $this->db->where('id', $id);
        $this->db->order_by('id', 'desc');
        return $this->db->get()->result();
    }

    function add($data) 
    {
        $this->db->insert('Users', $data);
        return $this->db->insert_id();
    }

    function update($data, $id) 
    {
        $this->db->where('id', $id);
        $this->db->update('Users', $data);
        return $this->db->affected_rows();
    }

    function delete($id) 
    {
        $this->db->where('id', $id);
        $this->db->delete('Users');
        return $this->db->affected_rows();
    }

    function filterUsers()
    {
        return $this->db->get('Users')->result();
    }   

}

任何人都可以告诉我为什么我会收到此错误,以及如何解决此问题。提前干杯。

2 个答案:

答案 0 :(得分:1)

这不是在codeigniter中调用模型的正确方法。

$this->model->add("new member");

应该是 -

$this->load->model('Users_model');
$this->Users_model->add('new member');

答案 1 :(得分:0)

这是因为,在CodeIgntier中,您需要明确地包含您的模型(我们也可以在autoload.php中执行此操作)。

在你的控制器的构造函数

function ExampleTest()
{
    parent::__construct('Example tests');
    $this->load->model('Users_model');
}

现在,从您的控制器调用它,如:

$this->Users_model->add("new member");