2017-05-30 101 views
1

嘗試在此處測試模型,但每次嘗試使用assertDatabaseHas方法時,都會給我提供類型錯誤。 Laravel 5.4和PHPUnit的6PHPUnit assertDatabaseHas()返回TypeError

PHPUnit 6.1.4 by Sebastian Bergmann and contributors. 

..E                 3/3 (100%) 

Time: 815 ms, Memory: 10.00MB 

There was 1 error: 

1) Tests\Unit\ModelTest::test_model_creation 
TypeError: Argument 2 passed to PHPUnit\Framework\Assert::assertThat() must be an instance of PHPUnit\Framework\Constraint\Constraint, instance of Illuminate\Foundation\Testing\Constraints\HasInDatabase given, called in /home/vagrant/domains-api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithDatabase.php on line 22 

/home/vagrant/domains-api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithDatabase.php:22 
/home/vagrant/domains-api/tests/Unit/ModelTest.php:36 

ERRORS! 
Tests: 3, Assertions: 2, Errors: 1. 

代碼測試類中:

$this->assertDatabaseHas('domains', [ 
      'domain' => $domain, 
      'domain_type' => 'full_domain', 
     ]); 

我使用laravel文檔作爲參考和語法似乎是正確的(至少對我來說)。 https://laravel.com/docs/5.4/database-testing#introduction

在此先感謝您的幫助。

回答

3

這個問題似乎是Laravel 5.4不支持與版本6

介紹如果你比較樹枝很容易看到PHPUnit的命名空間:

https://github.com/laravel/framework/blob/5.4/src/Illuminate/Foundation/Testing/Constraints/HasInDatabase.php#L8

https://github.com/laravel/framework/blob/master/src/Illuminate/Foundation/Testing/Constraints/HasInDatabase.php#L6-L8

我認爲最好的解決方法是運行測試與PHPUnit 5.x或可能更新laravel/framework使用主。由於主人可能包含重大變化,現在首先似乎是更安全的方法。

+0

現在工作正常...將我的composer.lock更改爲使用PHPunit 5.7。*(之前爲〜5.7),並且在運行作曲家更新之後,assertDatabaseHas方法正如現在應該那樣工作。 – brunohdaniel

相關問題