을 반영하지 :열 업데이트는 다음 테스트가 실패
/** @test */
public function set_shift_on_given_availability_to_a_candidate()
{
$candidate = $this->createCandidateWithFixedAvailability(pow(2, 3) - 1);
$candidate->availabilities[0]->setShift(App\Availability::SHIFT_TYPES['AM']);
$candidateShifts = $candidate->availabilities[0]->shifts;
$this->assertEquals(count($candidateShifts), 1);
$this->assertTrue(in_array('AM', $candidateShifts));
}
내가 장인 어설프게와 방법을 사용하려고 할 때 내가 예상 결과를 얻을 : 사용 방법
>>> $candidate->availabilities()->first()->shifts();
=> [
"AM",
]
>>> $candidate->availabilities()->first()->setShift(App\Availability::SHIFT_TYPES['PM']);
=> null
>>> $candidate->availabilities()->first()->shifts();
=> [
"PM",
]
구현 세부 사항 :
public function setShift(...$shiftTypes)
{
\DB::table($this->table)
->where([
['candidate_id', '=', $this->candidate_id],
['day_of_week_id', '=', $this->day_of_week_id]
])
->update(['shifts' => array_sum ($shiftTypes)]);
}
public function shifts()
{
$namedShifts = [];
foreach (Availability::SHIFT_TYPES as $key => $val) {
if($this->shifts & $val) {
array_push($namedShifts, $key);
}
}
return $namedShifts;
}
DatabaseTransactions 특성으로 별도의 테스트 데이터베이스를 사용하고 있습니다. 열심히 노력하고있는 동안 내 단위 테스트에서 시프트()와 함께 열 값을 가져 오려고 할 때 왜 업데이트가 열 값을 변경하지 않는지 이해할 수 없습니다.
DB 쿼리 빌더를 사용하여 열을 업데이트 한 다음 해당 열의 동적 속성을 가져 오지 않아도 변경 내용이 반영되지 않으므로 쿼리 작성기를 사용하여 가져 오거나 다음과 같이 시프트 값을 할당합니다. 업데이트가 성공적으로 실행될 때 setShift 함수의 동적 속성 동적 속성이 phpunit가 아니라 tinker에서 올바르게 업데이트된다는 것은 이상한 일입니다.
)
자,이 모든 꽤 투기 순전히 나 자신이 과거에 실행 발견 된 오류에 기반 필자가'$ candidate-> availabilities()'를 사용하고 있다면, 테스트에서'availabilities'가 적절하게 설정되지 않았을 것입니다. (예를 들어,'candidate_id'가 없다면 아마도 조건이 실패하는'[ 'candidate_id', '=', $ this-> candidate_id] '' '';;;;;;;;;;;;;;;;;;;;;;;;;; 그것은 내 편이 많은 가정이다.) – Hirnhamster
나는 변화를 만들었고 효과가있다. [0]과 first()가 둘 다 동일한 App \ Availability 모델에 대한 참조를 반환하는 것으로 보이는 이유를 이해할 수 없습니다. 답변을 작성하고 왜 이런 일이 발생했는지에 대한 정보를 조금 더 제공하면 기꺼이 답변을 수락 할 수 있습니다. 도와 주셔서 감사합니다! –