第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Laravel 策略在測試中的工作方式不同

Laravel 策略在測試中的工作方式不同

PHP
冉冉說 2023-03-11 14:15:26
Laravel 7. 我使用 http 測試來檢查我的頁面的可用性狀態(tài)。但我注意到在測試中,我的一項政策的運作方式有所不同??刂破鞣椒ǎ簆ublic function show(Competition $competition){    $competition->load('registeredTeams.user', 'teams.user');    return view('competitions.show', compact('competition'));}對其應用的策略方法:public function view(User $user, Competition $competition){    return $user->id === $competition->user_id;}測試及其內部方法:public function testCompetitionsPageTest(){    $user = $this->loginAsFakeUser();    $user->commissioner = true;    $user->save();    $competition = $this->createFakeCompetition($user->id);    $this->get('/competitions')->assertOk();    $this->get('/competitions/create')->assertOk();    $this->get('/competitions/' . $competition->id)->assertOk();}protected function loginAsFakeUser(){    $user = User::create(['username' => 'TestUserForTests']);    $this->actingAs($user);    return $user;}protected function createFakeCompetition(int $user_id){    $competition = new Competition([        'name' => 'TestCompetitionName',        'type' => competitionTypes()[2],        'tops_number' => 1,        'self_confirm' => 1,        'winner_points' => 3,        'registration_end' => today()->toDateString(),    ]);    $competition->user_id = $user_id;    $competition->save();    return $competition;}當我在瀏覽器中加載測試頁面時,一切正常。但是,當我測試它時,下一個斷言不起作用,因為它返回 403 代碼而不是 200:$this->get('/competitions/' . $competition->id)->assertOk();經(jīng)過一些操作后,我發(fā)現(xiàn)如果我在我的策略中使用非嚴格比較,它可以正常工作:return $user->id === $competition->user_id;你能幫我弄清楚為什么我創(chuàng)建的用戶通過$competition 的 idcreate()和actingAs($user)user_id 字段有不同的類型嗎?
查看完整描述

2 回答

?
回首憶惘然

TA貢獻1847條經(jīng)驗 獲得超11個贊

只是對您發(fā)布的代碼做出一些假設,我認為在測試之外$competition->user_id是一個string值,而在測試內部它是一個int值。你可以很容易地驗證這個假設。

發(fā)生這種情況是因為createFakeCompetition強制類型intfor $user_id,因為您在沒有嚴格模式的情況下運行,PHP 將傳遞的字符串轉換為整數(shù),但這會使比較$user->id === $competition->user_id失敗。

我希望已經(jīng)清楚了。


查看完整回答
反對 回復 2023-03-11
?
翻翻過去那場雪

TA貢獻2065條經(jīng)驗 獲得超14個贊

這是因為我的測試數(shù)據(jù)庫類型。它使用了 sqlite,它在檢索結果后只有字符串值。我剛剛從我的 phpunit.xml 中刪除了兩行,以便也使用我的主連接進行測試。

刪除的行: <server name="DB_CONNECTION" value="sqlite"/> <server name="DB_DATABASE" value=":memory:"/>


查看完整回答
反對 回復 2023-03-11
  • 2 回答
  • 0 關注
  • 141 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號