Illuminate\Http\Response - 属性 "original" 包含字符串而不是视图对象
Illuminate\Http\Response - Attribute "original" contains string instead of View object
我正在从控制器的方法返回一个视图,如下所示:
return view('Main::pages.content-page', compact('content'));
视图正确呈现但是,当我添加响应对象时,我看到响应对象的属性 "original" 是一个字符串,而它应该是视图对象。
Response {#385 ▼
+original: """
<!DOCTYPE html>\n
<html lang="en">\n
<head>\n
<meta charset="utf-8">\n
<meta http-equiv="X-UA-Compatible" content="IE=edge">\n
<meta name="viewport" content="width=device-width, initial-scale=1">\n
<meta name="author" content="">\n
<meta name="csrf-token" content="2CQirHnZ7isCBRfkhOYkzPAWOzNIqJISrbb1mfDv">\n
<meta name="description" content="">\n
<meta name="keywords" content="">\n
<title id="page_title"> Découvrir\n </title>\n
.........
这是预期的行为吗,因为我的测试实际上因此失败了,因为在我的测试中我基本上是在做
$this->get(route('main.page', ['content' => $content->slug]))
->assertResponseOk()
->assertViewHas('content', $content);
出现以下故障
F 1 / 1 (100%)
Time: 179 ms, Memory: 20.00MB
There was 1 failure:
1) IndexControllerTest::testGetPageMethod
The response was not a view.
Failed asserting that false is true.
查看assertViewHas()
方法的结构我们可以明白为什么
/**
* Assert that the response view has a given piece of bound data.
*
* @param string|array $key
* @param mixed $value
* @return $this
*/
public function assertViewHas($key, $value = null)
{
if (is_array($key)) {
return $this->assertViewHasAll($key);
}
if (! isset($this->response->original) || ! $this->response->original instanceof View) {
return PHPUnit::assertTrue(false, 'The response was not a view.');
}
......
条件 ! $this->response->original instanceof View
失败,因为 original 是一个字符串,但应该是一个视图对象。
所以我在这里迷路了。如果是这样,这是预期的行为吗?为什么 assertViewHas 方法中的条件?
I am on Laravel Homestead version '3.0.2'
Laravel 5.2.45
我 运行 遇到了同样的问题。在我的例子中,事实证明响应在准备好时接收到一个 View 对象,但是 "after" 中间件 类 在响应返回之前触及响应的其中一个正在将 View 对象转换为字符串.
您是否偶然使用了 genealabs/laravel-caffeine
软件包?正是那个中间件导致了我的问题。通过将该包设置为不在测试环境中注册,我能够解决问题。
我正在从控制器的方法返回一个视图,如下所示:
return view('Main::pages.content-page', compact('content'));
视图正确呈现但是,当我添加响应对象时,我看到响应对象的属性 "original" 是一个字符串,而它应该是视图对象。
Response {#385 ▼
+original: """
<!DOCTYPE html>\n
<html lang="en">\n
<head>\n
<meta charset="utf-8">\n
<meta http-equiv="X-UA-Compatible" content="IE=edge">\n
<meta name="viewport" content="width=device-width, initial-scale=1">\n
<meta name="author" content="">\n
<meta name="csrf-token" content="2CQirHnZ7isCBRfkhOYkzPAWOzNIqJISrbb1mfDv">\n
<meta name="description" content="">\n
<meta name="keywords" content="">\n
<title id="page_title"> Découvrir\n </title>\n
.........
这是预期的行为吗,因为我的测试实际上因此失败了,因为在我的测试中我基本上是在做
$this->get(route('main.page', ['content' => $content->slug]))
->assertResponseOk()
->assertViewHas('content', $content);
出现以下故障
F 1 / 1 (100%)
Time: 179 ms, Memory: 20.00MB
There was 1 failure:
1) IndexControllerTest::testGetPageMethod
The response was not a view.
Failed asserting that false is true.
查看assertViewHas()
方法的结构我们可以明白为什么
/**
* Assert that the response view has a given piece of bound data.
*
* @param string|array $key
* @param mixed $value
* @return $this
*/
public function assertViewHas($key, $value = null)
{
if (is_array($key)) {
return $this->assertViewHasAll($key);
}
if (! isset($this->response->original) || ! $this->response->original instanceof View) {
return PHPUnit::assertTrue(false, 'The response was not a view.');
}
......
条件 ! $this->response->original instanceof View
失败,因为 original 是一个字符串,但应该是一个视图对象。
所以我在这里迷路了。如果是这样,这是预期的行为吗?为什么 assertViewHas 方法中的条件?
I am on Laravel Homestead version '3.0.2'
Laravel 5.2.45
我 运行 遇到了同样的问题。在我的例子中,事实证明响应在准备好时接收到一个 View 对象,但是 "after" 中间件 类 在响应返回之前触及响应的其中一个正在将 View 对象转换为字符串.
您是否偶然使用了 genealabs/laravel-caffeine
软件包?正是那个中间件导致了我的问题。通过将该包设置为不在测试环境中注册,我能够解决问题。