【发布时间】:2017-04-01 03:29:12
【问题描述】:
我正在尝试为购物车编写一个测试类。这是我所拥有的:
ShoppingCartTest.php
class ShoppingCartTest extends TestCase {
use DatabaseTransactions;
protected $shoppingCart;
public function __construct() {
$this->shoppingCart = resolve('App\Classes\Billing\ShoppingCart');
}
/** @test */
public function a_product_can_be_added_to_and_retrieved_from_the_shopping_cart() {
// just a placeholder at the moment
$this->assertTrue(true);
}
}
但是,当我运行 phpunit 时,Laravel 似乎无法解析我的 ShoppingCartClass。
这是错误:
Fatal error: Uncaught exception 'Illuminate\Contracts\Container\BindingResolutionException'
with message 'Unresolvable dependency resolving
[Parameter #0 [ <required> $app ]] in class Illuminate\Support\Manager'
in C:\Development Server\EasyPHP-Devserver-16.1\eds-www\nrponline\vendor\laravel\framework\src\Illuminate\Container\Container.php:850
我的 ShoppingCart 类在许多不同的控制器中被解析得很好。
为什么 Laravel 在我的测试中不能解决它?
我也参考了this post,但仍然没有任何运气。
【问题讨论】:
-
你能发布
App\Classes\Billing\ShoppingCart的构造函数吗? -
@edcs 当然可以。这是课程。 pastebin.com/bPRpmtnH
-
酷 - 谢谢!你可以尝试使用
$this->app->make('App\Classes\Billing\ShoppingCart');,因为所有 Laravel 测试都有一个可用的应用程序实例作为属性。 -
@edcs 感谢您的回复。我尝试了
$this->app->make('App\Classes\Billing\ShoppingCart'),现在出现了一个新错误。 致命错误:在 null 上调用成员函数 make() -
只看我自己的一个项目,我从不使用
__construct()来创建事物的实例。尝试将__construct()重命名为setupShoppingCart()(或类似名称 - 名称无关紧要)并创建一个包含@before的文档块,如下所示: /** * @before */
标签: php laravel unit-testing phpunit