2016-07-29 6 views
3

ich vor kurzem Redux und Schreiben von Unit-Test im Rahmen des TDD-Verfahrens JestRedux Unit Test - Reduzierungen und Aktion Schöpfer

Im Schreibtest Handlungs Schöpfer und Reduzierungen lerne. Aber ich kämpfe mit: kann ich Action Creators im Reducers-Test nutzen?

import * as types from './../../constants/auth'; 
import * as actions from './../../actions/auth'; 
import reducer, {initialState} from './../auth'; 

kann ich tun, um diese

it('should set isFetching to true',() => { 
    const expectedState = { 
     ...initialState, 
     isFetching: true 
    } 

    expect(
     reducer(initialState, actions.loginPending()) 
    ).toEqual(expectedState) 
}); 

statt dessen?

it('should set isFetching to true',() => { 
    const expectedState = { 
     ...initialState, 
     isFetching: true 
    } 

    expect(
     reducer(initialState, {type: types.LOGIN_PENDING}) 
    ).toEqual(expectedState) 
}); 

Ich kam zu diesem Zweifel, weil die offizielle Dokumentation Verwendung harter Aktion in den Reduzierungen Test codiert:

expect(
    reducer([], { 
    type: types.ADD_TODO, 
    text: 'Run the tests' 
    }) 
).toEqual([{ 
     text: 'Run the tests', 
     completed: false, 
     id: 0 
}]) 

ich hart codierte Aktionen erraten ist die beste Praxis nicht wahr?

Antwort

2

Interessante Frage und ich würde sagen, es kommt darauf an, wie Sie Ihre Testsuite ausführen. Persönlich kodiere ich die Aktionen hart, denn wenn man darüber nachdenkt, erklären sie erklärend, was der Reduzierer erwartet. Das Argument für den Import der Aktionen lautet, dass die Tests nicht aktualisiert werden müssen, wenn Sie die Quelle ändern. Dies bedeutet jedoch auch, dass Sie erwarten, dass Ihre Aktionen immer korrekt sind, BEVOR Sie diese Tests ausführen.

Wenn das der Fall ist (wenn Sie Ihre Aktionstest-Suite immer vor diesem ausführen), dann wäre es sinnvoll, sie in Ihre Reducer-Testsuite zu importieren. Das einzige Argument gegen diese Logik wäre, dass es nicht so einfach ist, einem neuen Entwickler zu zeigen, wie Ihr Reducer funktioniert, indem er nur die Reducer-Test-Suite betrachtet, da sie auch die Quelldatei der Aktionen betrachten muss, um zu sehen, welche Art von Aktionen sind versandt.

Auf der anderen Seite ist die Festschreibung Ihrer Aktionen deklarativer, erfordert jedoch, dass Sie jeden Reducer-Test aktualisieren müssen, wenn sich Ihre Aktion ändert. Der Grund, warum ich diesen Ansatz immer noch empfehle, ist, dass es Ihnen erlaubt, kontrolliertere Daten zu senden, aber ich stimme zu, dass es die Wartungskosten erhöht.

+0

Hatten die gleichen Gedanken darüber, vor allem, um "Wartungskosten" zu vermeiden. Aber wie du feststellst, dass sie es deklarativ machen, ist es ziemlich hilfreich für neue Entwickler. Da die Tests nicht separat ausgeführt werden, können Sie die Aktionen einfach fest codieren. Vielen Dank –