Я видел несколько сообщений об этом в разных местах, и все они, кажется, имеют похожий ответ. Однако для жизни я не могу заставить объект Mockery работать должным образом.
Модель атрибута выглядит так
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Attribute extends Model {
public function test()
{
return (new \App\Models\Value())->hello();
}
}
Модель ценности, подобная этой
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Value extends Model
{
public function hello()
{
return 'goodbye';
}
}
Тест PHPUnit выглядит так
use App\Models\Attribute;
class AttributeModelTest extends TestCase
{
public function testThing()
{
$mock = Mockery::mock('\App\Models\Value');
$mock->shouldReceive('hello')
->once()
->andReturn('hello');
$this->app->instance('\App\Models\Value', $mock);
$a = new \App\Models\Attribute();
$return = $a->test();
var_dump($return);
}
}
PHPUnit выводит «до свидания», хотя я говорю ему вернуть «привет» в макете, а это не так. Любые идеи, что я могу делать неправильно?
$mock->hello()
. Не уверен, понятно ли это, но я пытаюсь издеваться над ответом, который используетAttribute
. если я вызываю $mock-›hello(), он возвращает ожидаемое значение «hello» - person Catharsis   schedule 26.05.2015\App::make('Blah')
, иначе пространство имен убьет ее. - person Catharsis   schedule 26.05.2015