gpt4 book ai didi

testing - Laravel 测试错误

转载 作者:行者123 更新时间:2023-11-28 20:31:13 25 4
gpt4 key购买 nike

我刚开始学习如何在 Laravel 中进行测试。虽然我遇到了一些问题..我正在测试我的 Controller 并想检查 View 是否分配了变量。

我的 Controller 代码:

class PagesController extends \BaseController {

protected $post;

public function __construct(Post $post) {
$this->post = $post;
}

public function index() {
$posts = $this->post->all();
return View::make('hello', ['posts' => $posts]);
}
}

我的 View 包含一个 foreach 循环来显示所有帖子:

@foreach ($posts as $post)
{{post->id}}
@endforeach

最后但同样重要的是我的测试文件:

class PostControllerTest extends TestCase {

public function __construct()
{
// We have no interest in testing Eloquent
$this->mock = Mockery::mock('Eloquent', 'Post');
}

public function tearDown()
{
Mockery::close();
}

public function testIndex() {

$this->mock->shouldReceive('all')->once()->andReturn('foo');
$this->app->instance('Post', $this->mock);
$this->call('GET', '/');
$this->assertViewHas('posts');

}

}

现在问题来了,当我运行“phpunit”时出现以下错误:

ErrorException:为 foreach() 提供的参数无效

知道为什么 phpunit 会返回这个错误吗?

最佳答案

你的问题在这里:

$this->mock->shouldReceive('all')->once()->andReturn('foo');

$this->post->all()(这是你在 mock 的)应该返回一个数组,这就是你的 View 所期望的。您正在返回一个字符串。

$this->mock->shouldReceive('all')->once()->andReturn(array('foo'));

应该处理您遇到的错误,尽管您随后会收到“获取非对象属性”类型的错误。

你可以这样做:

$mockPost = new stdClass();
$mockPost->id = 1;
$this->mock->shouldReceive('all')->once()->andReturn(array($mockpost));

关于testing - Laravel 测试错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24328609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com