2

我已添加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

实际上将 extends Eloquent 更改为 extends Illuminate\Database\Eloquent\Model 可以解决问题,但我仍然想了解发生了什么。

4

4 回答 4

1

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

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

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

暂时想不出别的。有人有其他想法吗?

于 2013-06-25T12:27:05.400 回答
1

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

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

奇怪的是调用()也会导致未定义的保存()......

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

于 2013-06-25T07:06:31.880 回答
0

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

于 2013-12-16T05:06:45.433 回答
0

在我看来,您的 $user 和 $post 类没有扩展 Eloquent 类。

确保你的文件中有这个:

class User extends Eloquent {
...
}
于 2013-06-19T20:54:21.837 回答