플러그인 프론트엔드 테스트에서 자체 픽스처로 Site 객체를 오버라이드할 수 있을까요?

현재 이 PR을 작업 중입니다: FIX: presenting formatted location on User Card by merefield · Pull Request #73 · merefield/discourse-locations · GitHub

새로운 프론트엔드 테스트로 이 변경 사항을 커버하려고 합니다.

하지만 필요한 데이터 속성이 정의되지 않아 테스트가 실행되지 않습니다.

제가 직면한 문제는 Locations 플러그인이 존재할 때 Site가 가진 추가 속성을 포함하고 있는 이 픽스처로 Site 내 데이터를 성공적으로 오버라이드하는 방법입니다:

… 그리고 테스트의 나머지 부분까지 이를 유지시키는 것입니다!

새로운 테스트는 여기에 있습니다.

픽스처로 Site를 성공적으로 로드한 것 같습니다.

브라우저에서 qunit 실행 중이 디버거 지점에서 멈추고, 올바르게 로드되었음을 알 수 있습니다:

  test("user card location - shows correct format", async function (assert) {
    const siteAttrs = {
      ...siteFixtures["site.json"].site,
    };
    PreloadStore.store("site", cloneJSON(siteAttrs));
    Site.resetCurrent();
    debugger;
    PreloadStore.get("site")

image

하지만 User Card를 클릭하면 데이터가 예상과 다르고, 특히 country_codes 속성이 없어 테스트가 여기서 멈춥니다:

제 오버라이드된 Site 데이터가 왜 사라지는 걸까요?

음, 이건 정말 답답하네요.

Site 객체의 값이 여기에서 설정되는 것 같습니다:

그리고 이 값을 오버라이드할 수 없는 것 같나요?

코어에서 픽스처를 수정해서 확인해 보았습니다 (여기: discourse/app/assets/javascripts/discourse/tests/fixtures/site-fixtures.js at 93a4012ecb3af7306de0c51283d6dd2b2e90818c · discourse/discourse · GitHub) 제 수정 사항이 반영되는 것을 확인했습니다.

하지만 저는 코어를 수정하는 것이 아니라, 제 플러그인에 저장된 픽스처를 사용하여 플러그인 테스트에서 값을 오버라이드하고 싶습니다.

다시 한 번 말씀드리자면, 테스트 코드 범위에서는 이를 수행할 수 있지만, 플러그인 코드가 실행되면 스코프가 코어 테스트 헬퍼에 의해 로드된 픽스처와 관련된 site 객체를 가져오는 것 같습니다 …

:thinking:

드디어 해결했습니다. 다른 객체와 마찬가지로 needs를 사용할 수 있다는 걸 알게 됐어요:

힌트:

최종 코드:

  needs.site(cloneJSON(siteFixtures["country_codes.json"]));