Jest to interesujące, ponieważ oddzieliłeś kontrolery od routerów. Drugi artykuł StackOverflow wspomniany w komentarzach jest dobrym sposobem na przetestowanie kontrolerów.Trzeba pamiętać o testach jednostkowych, co dokładnie testujesz. Nie trzeba pisać testów, aby przetestować bibliotekę ekspresową, ponieważ prawdopodobnie ma ona własne testy jednostkowe. Musisz przetestować swoje połączenia z biblioteką. Tak na trasie książek, wystarczy przetestować tę jedną linię kodu:
router.get('/', controller.index);
Rozejrzałem się, aby zobaczyć, czy nie było oczywistym sposobem, aby uzyskać listę tras z wyraźną biblioteki, ale nie zrobił” t zobaczyć jeden. Prawdopodobnie możesz po prostu spojrzeć na samą bibliotekę i sprawdzić jej wnętrze, aby sprawdzić, czy poprawnie ustawiłeś trasę. Inną opcją jest udowodnić to i po prostu sprawdzić, czy dzwonisz poprawnie.
Będzie to dość skomplikowane, ponieważ trzeba przetestować niektóre podstawowe elementy Javascriptu, aby przetestować tę jedną linię kodu. Oto jak to zrobiłem:
describe('BookRoute', function() {
it("should route/to books controller index", function() {
var controller = require('../../../api/controllers/books');
var orig_this = this;
var orig_load = require('module')._load;
var router = jasmine.createSpyObj('Router', ['get']);
var express = jasmine.createSpyObj('express', ['Router']);
express.Router.and.returnValues(router);
spyOn(require('module'), '_load').and.callFake(function() {
if (arguments[0] == 'express') {
return express;
} else {
return orig_load.apply(orig_this, arguments);
}
});
require("../../../router/routes/books");
expect(router.get).toHaveBeenCalledWith('/', controller.index);
});
});
Co się tutaj dzieje to użyłem funkcji spyOn Jasmine do spyOn funkcję _load w module.js która jest co obsługuje wszystkich połączeń wymagających. Jest tak, że gdy wymagamy od routera książek i wywołań require ("express"), możemy zwrócić nasz ekspresowy SpyObj, który stworzyliśmy za pomocą jaśminu.createSpyObj. Po wymianie ekspresu z naszym obiektem szpiegowskim możemy przywrócić nasz router SpyObj, który pozwoli nam szpiegować router.get. Następnie możemy sprawdzić, czy jest wywoływana za pomocą "/" i controller.index.
Prawdopodobnie może się to stać pewnym narzędziem, jeśli chcesz dużo z niego korzystać.
Zwykle omijam dużo tego, używając bardziej zorientowanego obiektowo podejścia, albo albo przechodzę wokół jakiegoś obiektu wszędzie, gdzie mogę kpić dla testów, albo możesz użyć jakiegoś rodzaju zastrzyku zależności, jak w przypadku Angular.
Możliwy duplikat [W jaki sposób jedna jednostka testuje trasy za pomocą Express?] (Http://stackoverflow.com/questions/9517880/how-does-one-unit-test-routes-w-express) – gnerkus
Nie duplikat , powiązane pytanie dotyczy starszej wersji Express, która ma inne API. – Kos
Użyj tego [Link] (http://www.designsuperbuild.com/blog/unit_testing_controllers_in_express/) lub tego [Link] (http://www.chrisstead.com/archives/1128/unit-testing-express-routing/). –