Модуль, издевающийся над mock-require, все еще вызывает фактический модуль - PullRequest
0 голосов
/ 08 сентября 2018

Я пытаюсь научиться юнит-тестированию для NodeJS. Я пробую жасминовые рамки.

Я написал спецификацию, которая проверяет, была ли вызвана экспресс-функция контроллера по запросу.

Это мой файл спецификаций

var request = require("request");
var base_url = "http://localhost:3000/";
var mock = require('mock-require');

describe("Testing hotelSearchController", function(){
    var  server, mockHandle;

    beforeEach(function(){
        mockHandle = {
            handleSearchRequest :  (req, res) => {  res.send("hi");}
        }

        var hotelSearchController = {
            handleSearchRequest: mockHandle.handleSearchRequest
        };

        mock("../../app/controllers/hotelSearchController", hotelSearchController);
        server = require("../utils/server")();
    });

    afterEach((done)=>{
        mock.stopAll();
        server.close(done);
    });

    it('should call handleSearchRequest()', function(done) {
        var spy = spyOn(mockHandle, "handleSearchRequest").and.callThrough();
        request.get(base_url+"search", function(error, response, body) {

            expect(body).toBe("a");
            expect(spy).toHaveBeenCalled();
            done();
        });
    });
});

Моя проблема в том, что когда я запускаю тестирование, не учитывается насмешка над модулем контроллера, вызывается реальный модуль и его функция. Кроме того, шпион также терпит неудачу. Может ли кто-нибудь помочь мне с этим?

...