在Laravel 4中运行测试会产生“Unknown method User :: save()”

时间:2013-06-14 14:22:24

标签: laravel laravel-4

我添加了phpunit作为作曲家依赖,做了composer update

我写了一个简单的测试,如下:

$user = new User;
$user->save();

我跑

vendor/bin/phpunit

vendor/bin/phpunit -c phpunit.xml

但是我得到了

Undefined method User::save()

同时我可以看到$user instanceof Eloquent是真的。

更糟糕的是 - 如果我call('POST', '/posts')我遇到同样的问题 - Undefined method Post::save()

我错过了什么吗?如何正确运行测试?

相关代码部分:

https://gist.github.com/anonymous/5849706

更新

我将回购推送到http://github.com/laravel-test-948320/bearded-bugfixes

实际上更改扩展Eloquent以扩展Illuminate \ Database \ Eloquent \ Model解决问题,但我仍然想了解是什么。

4 个答案:

答案 0 :(得分:1)

我重新创建了你的整个测试套件(我在读这篇文章时正在设置我的测试套件)。 所有成功的测试,所以我想知道你有哪些版本:

  • php版
  • composer.json中的laravel / framework版本
  • phpunit版本

奇怪的是,call()也会导致未定义的save()...

您是否安装了任何其他软件包或使用名称空间?

答案 1 :(得分:1)

尝试扩展Illuminate \ Database \ Eloquent \ Model而不是Eloquent,看看是否有所作为。这可能是一个自动加载问题。你能从应用程序中保存模型吗?例如,您是否可以在路径中创建模型并转储保存功能的结果?

另一个问题是,您是通过composer还是laravel ClassLoader(global.php文件)加载模型?我在使用ClassLoader时自动加载了我的类,我遇到了麻烦。

我怀疑这是一个作曲家问题,因为laravel处理别名,所以转储自动加载不应该改变任何东西。如果在该文件中编译了Eloquent别名,那么运行'artisan clear-compiled'可能会有效。

此刻无法想到任何其他事情。有人有其他想法吗?

答案 2 :(得分:0)

听起来像你的$ user和$ post类没有扩展Eloquent类。

确保您的文件中包含以下内容:

class User extends Eloquent {
...
}

答案 3 :(得分:0)

尝试将parent :: setUp()添加到测试类中的__construct()