После заглушки функция еще вызывает реальную функцию - PullRequest
0 голосов
/ 19 февраля 2020

Я поставил в тупик содержимое файла, поэтому могу запускать только внешнюю функцию

файл. html

<body onload ="test('file.txt')">
<body>

файл. js

    const fs1 = require('fs');
    let param;
    module.export = {
         test,
         test1,
         param
    }

    function test (outputParam) {
      let fileData = test1(outputParam);
      param = fileData;
    }

    function test1(outputParam) {
       let data = fs1.readFileSync(outputParam);
       return data; 
    }

Здесь, как вы видите, я загружаю функциональный тест из html onload и, в свою очередь, test1 вызывает и читает файл, я поставил этот файл на место, как показано в тесте ниже

Когда я запускаю тест, я хочу видеть, что переменная param имеет значение содержимого файла

test.spe c. js

    let sinon = require("sinon");
    let filejs = require('./file.js');

    it('should run only the outer function' ,function() {

    // I try to stub my function here
    sinon.stub(filejs,'test1').callsFake ((someArg) => {
      return "this is my file content";
    });

        // Now I will call my test function
        filejs.test(someArg);

    })

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

Я использую mocha, я новичок в понятиях заглушки или mock Любое предложение действительно приветствуется.

1 Ответ

1 голос
/ 19 февраля 2020

Возможно, вам следует попытаться заглушить readFileSync.

const fs = require('fs');

// ...

sinon.stub(fs, "readFileSync").callsFake ((someArg) => {
  return "this is my file content";
});

Кроме того, я могу обнаружить две проблемы с вашим кодом.

  • real readFileSync вернет Buffer, если вызывается без второго параметра, а не строки, как ваша заглушка.

  • Событие загрузки тела существует только внутри DOM. Модуль fs доступен только в Node.js. Если вы запустите свой код в браузере, вы не сможете использовать fs.readFileSync. Если вы запустите его в Node, ваш файл HTML и событие onload будут бесполезны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...