在 Kohana 的单元测试中使用 Mango
Using Mango within a unit test in Kohana
所以我将我们的应用程序切换为使用 Mango 而不是 Kohana 中的内置 ORM。我已经切换了所有必要的应用程序代码以按预期工作,但是当我们的 CI 服务器运行我们的单元测试时,我收到 "Class 'Mango' not found" 错误。
提供的测试很简单,但我在 UnitTest 中使用的样式与我在常规 GET 请求中使用它们的方式完全相同。它在我执行 GET 时有效,但单元测试失败。现在希望无关,我无法在本地重现,但无法让单元测试在我们的 CI 服务器上运行。
我的猜测是我没有正确加载模块,但正如我所说,它在应用程序中工作正常,只有我的单元测试失败(出现致命错误)。
application/classes/Model/User.php
class Model_User extends Mango {
protected $_fields = array(
'user_id' => array('type' => 'string', 'required'=>TRUE),
'first_name' => array('type' => 'string', 'required'=>TRUE),
'last_name' => array('type' => 'string', 'required'=>TRUE),
);
}
application/tests/UserTest.php
Class UserTest extends Unittest_TestCase
{
public function testUserCreation()
{
$user_data = array(
"user_id" => "1234asdf",
"first_name" => "Test",
"last_name" => "User",
);
$new_user = Mango::factory("User", $user_data);
$this->assertEquals($user_data, $new_user->as_array());
}
}
编辑:这是我引入的 Mango 模块的 link:https://github.com/Wouterrr/MangoDB
如果有人通过 google 偶然发现了这个问题,我已经解决了这个问题。看起来我们的应用程序 nginx 配置比 CLI 更好地处理大写。将 "Mango" 更改为 "mango" 后,我看到错误消息更改为未找到它的父级 class(出于相同的外壳原因)。虽然我想我可以改变所有的大小写,但 Kohana 有一个处理大小写问题的函数,所以在 application/bootstrap.php 中,你只需要 运行 以下两项:
spl_autoload_register(array('Kohana', 'auto_load'));
spl_autoload_register(array('Kohana', 'auto_load_lowercase'));
所以我将我们的应用程序切换为使用 Mango 而不是 Kohana 中的内置 ORM。我已经切换了所有必要的应用程序代码以按预期工作,但是当我们的 CI 服务器运行我们的单元测试时,我收到 "Class 'Mango' not found" 错误。
提供的测试很简单,但我在 UnitTest 中使用的样式与我在常规 GET 请求中使用它们的方式完全相同。它在我执行 GET 时有效,但单元测试失败。现在希望无关,我无法在本地重现,但无法让单元测试在我们的 CI 服务器上运行。
我的猜测是我没有正确加载模块,但正如我所说,它在应用程序中工作正常,只有我的单元测试失败(出现致命错误)。
application/classes/Model/User.php
class Model_User extends Mango {
protected $_fields = array(
'user_id' => array('type' => 'string', 'required'=>TRUE),
'first_name' => array('type' => 'string', 'required'=>TRUE),
'last_name' => array('type' => 'string', 'required'=>TRUE),
);
}
application/tests/UserTest.php
Class UserTest extends Unittest_TestCase
{
public function testUserCreation()
{
$user_data = array(
"user_id" => "1234asdf",
"first_name" => "Test",
"last_name" => "User",
);
$new_user = Mango::factory("User", $user_data);
$this->assertEquals($user_data, $new_user->as_array());
}
}
编辑:这是我引入的 Mango 模块的 link:https://github.com/Wouterrr/MangoDB
如果有人通过 google 偶然发现了这个问题,我已经解决了这个问题。看起来我们的应用程序 nginx 配置比 CLI 更好地处理大写。将 "Mango" 更改为 "mango" 后,我看到错误消息更改为未找到它的父级 class(出于相同的外壳原因)。虽然我想我可以改变所有的大小写,但 Kohana 有一个处理大小写问题的函数,所以在 application/bootstrap.php 中,你只需要 运行 以下两项:
spl_autoload_register(array('Kohana', 'auto_load'));
spl_autoload_register(array('Kohana', 'auto_load_lowercase'));