2016-10-03 15 views

Odpowiedz

6

Jest używany do tworzenia środowiska przeglądarki. JSDom nie obsługuje jednak window.matchMedia, więc będziesz musiał sam go utworzyć.

Jest to manual mocks praca z granicami modułów, tj. Instrukcje wymagające/importujące, więc nie byłoby odpowiednie naśmiewanie się z window.matchMedia, ponieważ jest to globalne.

więc masz dwie opcje:

  1. zdefiniować własny lokalny moduł matchMedia które wywozi window.matchMedia. - Pozwoliłoby to na zdefiniowanie ręcznego makiety do użycia w teście.

  2. Zdefiniuj setup file, która dodaje makietę dla matchMedia do globalnego okna.

z którymkolwiek z tych opcji można użyć matchMedia polyfill jako mock który przynajmniej pozwoli swoje badania, aby uruchomić lub jeśli potrzebne do symulacji różnych stanów może chcesz napisać własne z metody prywatne co pozwala na skonfigurować to zachowanie podobne do żartem fs manual mock

5

kładę niedopałek matchMedia w moim pliku testowego jest (powyżej testów), co pozwala na testy do pass:

window.matchMedia = window.matchMedia || function() { 
    return { 
     matches : false, 
     addListener : function() {}, 
     removeListener: function() {} 
    }; 
}; 
+0

oraz w pliku testowego, wewnątrz "opisz" używając żartu, piszę: 'global.window.matchMedia = jest.fn (() => {return {matches: false, addListener: jest.fn(), removeListener: jest.fn()}}) ' – nschwan94

+0

Jak importować plik pośredniczący? –

7

używałem tej techniki do rozwiązać kilka mockich problemy.

describe("Test",() => { 
    beforeAll(() => { 
    Object.defineProperty(window, "matchMedia", { 
     value: jest.fn(() => { return { matches: true } }) 
    }); 
    }); 
}); 

lub jeśli chcesz wyśmiewać go cały czas, można umieścić wewnątrz pliku mocks wybierane z package.json: "setupTestFrameworkScriptFile": "<rootDir>/src/tests/mocks.js",

ref: setupTestFrameworkScriptFile

+0

Gdzie dodajesz ten kod? Jeśli dodaję go do początku mojego pliku testowego, to nadal nie może znaleźć matchMedia. –

+1

@ HolgerEdwardWardlowSindbæk Edytowałem swoją odpowiedź dla większej przejrzystości! –

Powiązane problemy