Как проверить значение свойства после насмешки над функцией: Ошибка утверждения, мокко - PullRequest
0 голосов
/ 19 февраля 2020

В соответствии с предложением в вопросе введите описание ссылки здесь Я высмеиваю readFileSyn c и теперь высмеиваю свою внешнюю функцию. Я хочу проверить, установлено ли значение переменной, как ожидается, или нет

file. js

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

    function test (outputParam) {
     param = fs1.readFileSync(outputParam);
    }

Я задал этот readFileSyn c, и он возвращает указанное содержимое файла, как показано в тесте ниже

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

test.spe c. js

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


    it('should run only the outer function and test if variable param is set to `this is my file content` ' ,function() {

     let someArg ="file.xml";

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

      var mock = sinon.mock(filejs);
      mock.expects('test').withArgs(someArg);
      expect(filejs.param).to.equal('this is my file content');

  })

Из файла. js Как видите, свойство param получает значение из «readFileSyn c», которое возвращает значение

Когда я запускаю тест,

ожидаем (файл js .param ) .to.equal («это содержимое моего файла»);

AssertionError: ожидается, что значение undefined равно, «это содержимое моего файла»

1 Ответ

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

Обратите внимание на правильное написание module.exports - не module.export.

В вашем файле. js переменная param не инициализирована, поэтому она получит значение undefined и будет быть экспортированы с этим значением тоже. Экспортированное значение не изменится, если вы измените param позже. Экспорт связывает свойство только со значением, а не с переменной. И на самом деле вам даже не нужна локальная переменная. Чтобы динамически изменить значение экспорта, по крайней мере, в Node, вы просто переназначаете свойство на module.exports.

const fs1 = require('fs');

module.exports = {
     test
}

function test (outputParam) {
    module.exports.param = fs1.readFileSync(outputParam);
}

Что касается вашего test.spe c. js, вы уже очень близко, чтобы заставить его работать. После создания метода (ов), который не следует вызывать в хабе, просто вызовите функцию test, передавая реальные параметры. Там не нужно издеваться.

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


it('should run only the outer function and test if variable param is set to `this is my file content` ' ,function() {

 let someArg ="file.xml";

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

  filejs.test(someArg);

  expect(filejs.param).to.equal('this is my file content');

});

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