php 预期响应状态代码[201、301、302、303、307、308],但收到404

oewdyzsn  于 2022-12-17  发布在  PHP
关注(0)|答案(2)|浏览(117)

为什么我会收到此错误?似乎我做的一切都正确
试验:

public function test_user_can_add_product_to_cart()
    {
        $user = User::factory()->create();

        $this->actingAs($user);

        $response = $this->post('addProductToCart', ['quantity' => 4], [
            Product::first(),
        ]);

        $response->assertRedirect('/products');

    }

途径:

Route::middleware([auth::class])->group(function () {
    Route::post('/cart/add/{product}', [CartController::class, 'addProductToCart'])->name('addProductToCart');
}

控制器:

public function addProductToCart(Request $request, Product $product)
{
    return redirect()->route('products.index')->with('alert', 'Added product to cart');   
}
eufgjt7s

eufgjt7s1#

addProductToCart是控制器中方法的名称,也是路由的名称,但实际调用该方法的URL是/cart/add/{product}。因此,要使其工作,您需要将POST指向该URL。
您可以通过多种不同的方式来完成此操作:

$this->post("/cart/add/{$product->id}", ['quantity' => 4]);

// OR

$this->post(url("/cart/add/{$product->id}"), ['quantity' => 4]);

// OR

$this->post(route('addProductToCart', $product), ['quantity' => 4]);

您还需要在测试中定义$product,这样才能正常工作,类似于:

$product = Product::factory()->create();

// OR

$product = Product::first();

因此,总体而言,您的测试将如下所示:

public function test_user_can_add_product_to_cart() {
  $user = User::factory()->create();
  $product = Product::factory()->create();

  $this->actingAs($user);
  $response = $this->post(route('addProductToCart', $product), ['quantity' => 4]);

  $response->assertRedirect('/products');
}
ny6fqffe

ny6fqffe2#

您需要在测试中使用route()帮助器:

public function test_user_can_add_product_to_cart()
    {
        $response = $this->post(route('addProductToCart'), ['quantity' => 4], [
            Product::first(),
        ]);

        ...
    }

相关问题