Жасмин шпионит за экспортированной функцией на NodeJS - PullRequest
0 голосов
/ 25 апреля 2018

У меня были проблемы с отслеживанием экспортированной функции в приложении NodeJS (v9.6.1) с использованием Jasmine.

Приложение написано в машинописном тексте и переносится с помощью tsc в папку dist для выполнения в виде javascript.

Приложение

У меня есть файл утилит Foo (foo.utils.ts), который экспортирует функции:

import {readFile} from "fs";
export function getData(filePath: string){
    const data = readFile(filePath)
    // various checks happens here.
    return data;
}

и класс Bar в файле bar.ts:

import {getData} from "../utils/foo.utils
export class Bar {
        public do(){
    // ... does stuff
    const data = getData(filePath);
    // etc.
    }
}

Тест

Теперь я пытаюсь шпионить за экспортированным методом getData, чтобы проверить, был ли он вызван, и вернуть поддельное значение.Я не хочу читать файл в моем модульном тесте (и даже вообще использовать настоящий метод getData)

Файл bar.spec.ts для тестирования:

describe("Bar", ()=>{
    let bar: Bar;
    beforeEach(function() {
        bar = new Bar();
    })
    it(" should do stuff", ()=>{
        const spy = spyOn(???, "getData").and.returnValue([]);
        bar.do();
        expect(spy).toHaveBeenCalled();
    })
});

Проблемы

Поскольку это приложение NodeJS, я пытался использовать global в качестве объекта для шпионажа, но я получаю ошибку:

Ошибка:Метод getAttachementData () не существует

Я также пытался добавить

import * as fooutils from ".../src/utils/foo.utils

И шпионить за fooutils, но я все еще выполняю экспортированную функцию (и вылетает, когдаон пытается прочитать файл ...)

Теперь я немного потерян.Из того, что я обнаружил, на самом деле невозможно смоделировать экспортированную функцию (даже если они должны быть добавлены к объекту global).Я думал о рефакторинге файла utils для создания класса utils, который экспортирует статический метод и следит за ними.

Вопросы

  • Я что-то не так делаю?
  • можно ли шпионить (и заменить) экспортированную функцию?
  • Будет ли работать статический метод в классе (а не функция экспорта)?
  • Любой другой способ?
...