Po krótkim romansie z odkrywczym wzorcem modułów doszedłem do wniosku, że mam do czynienia z cofnięciem, jeśli chodzi o moduły do testowania jednostek. Nie mogę jednak zdecydować, czy to moje podejście do testowania modułu, czy też jest jakaś forma obejścia.Odsłanianie wzorca modułu - testowanie jednostki za pomocą Jasmine
Rozważmy następujący kod:
var myWonderfulModule = (function() {
function publicMethodA (condition) {
if(condition === 'b') {
publicMethodB();
}
}
function publicMethodB() {
// ...
}
return {
methodA : publicMethodA,
methodB : publicMethodB
}
}());
Gdybym chciał przetestować (używając Jasmine) różne ścieżki prowadzące przez publicMethodA do publicMethodB. Mógłbym napisać mały test tak:
it("should make a call to publicMethodB when condition is 'b'", function() {
spyOn(myWonderfulModule , 'publicMethodB');
myWonderfulModule.publicMethodA('b');
expect(myWonderfulModule.publicMethodB).toHaveBeenCalled();
});
Jeśli dobrze rozumiem, jest to kopia publicMethodB wewnątrz zamknięcia, które nie mogą być zmieniane. Nawet jeśli zmienię myWonderfulModule.publicMethodB potem:
myWonderfulModule.publicMethodB = undefined;
nazywając myWonderfulModule.publicMethodA
będzie nadal prowadzony oryginalną wersję B.
Powyższy przykład jest oczywiście uproszczony, ale istnieje wiele scenariuszy mogę myśleć gdzie go byłby dogodny dla ścieżek warunkowych testu jednostkowego za pomocą metody.
Czy jest to ograniczenie ujawniającego wzoru modułu lub po prostu niewłaściwe użycie testu jednostkowego? Jeśli nie, to jakie są dostępne dla mnie obejścia? Zastanawiam się nad przejściem do czegoś takiego jak RequireJS lub powrotem do kodu niemodularnego.
Każda rada doceniona!