ショッピングカートのテストクラスを記述しようとしています。これが私が持っているものです:
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テスト中に解決できないのはなぜですか?
この投稿 にも言及しましたが、まだ運がありませんでした。
私はそれを考え出した。これが更新されたクラスです。
class ShoppingCartTest extends TestCase {
use DatabaseTransactions;
protected $shoppingCart;
public function setUp() {
parent::setUp();
$this->shoppingCart = $this->app->make('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);
}
}
@ edcs に感謝します。正しい方向に導いてくれました。 app
インスタンスはまだ作成されていないため、__construct
ではなく、setUp関数を使用する必要があります。
___construct
_を使用する場合は、_PHPUnit\Framework\TestCase
_と同じコンストラクタを使用し、何も壊したくない場合は、必ず親メソッドを呼び出す必要があります。
_class MyTest extends TestCase
{
public function __construct($name = null, array $data = [], $dataName = '')
{
parent::__construct($name, $data, $dataName);
// my init code
}
}
_
ただし、適切な方法は、initコードを1回実行する場合はsetUpBeforeClass()
メソッドを使用するか、クラスに含まれる各テストの前にinitコードを実行する場合はsetUp()
を使用することです。詳細は PHPUnitのドキュメント を確認してください。