Как издеваться над атрибутом настроек объекта Office с помощью библиотеки office-addin-mock?

Чтобы протестировать эту функцию ...

      export async function blueBlackToggle() {
  try {
    await Excel.run(async context => {
      const range = context.workbook.getSelectedRange();
      let blueBlackToggleNum = Office.context.document.settings.get("blueBlackToggle");
      console.log(blueBlackToggleNum);
      if (blueBlackToggleNum === 0) {
        const propertiesToGet = range.getCellProperties({
          format: {
            font: {
              color: true
            }
          }
        });
        await context.sync();
        Office.context.document.settings.set(
          "blueBlackToggle",
          propertiesToGet.value[0][0].format.font.color === "#0000FF" ? 1 : 2
        );
        Office.context.document.settings.saveAsync();
      }
      Office.context.document.settings.set("blueBlackToggle", blueBlackToggleNum + 1);
      Office.context.document.settings.saveAsync();
      range.format.font.color = blueBlackToggleNum % 2 === 0 ? "blue" : "black";
      await context.sync();
    });
  } catch (error) {
    console.error(error);
  }
}

Я сделал этот набор для тестирования ...

      import 'regenerator-runtime/runtime';
//import add in feature
import * as format from "../format";
//import mock library
import { OfficeMockObject } from "office-addin-mock";



const excelHostMockData = {
  context: {
    workbook: {
      range: {
        format:{
            font:{
                color:"#000000"
            }
        },
        address:"C2:G3",
        value:[[
            {
                format:{
                    font:{
                        color:"#000000"
                    }
                }
            }
        ]],
        getCellProperties: function(obj){
            return this;
        }
      },
      // Mock getSelectedRange method.
      getSelectedRange: function () {
        return this.range;
      },
    },
  },
  // Mock the Excel.run method.
  run: async function(callback) {
    await callback(this.context);
  },
};

const officeMockData = {
    context:{
        document:{
            settings:{
                blueBlackToggle:0,
                get: function(setting){
                    if(setting==="blueBlackToggle"){
                        return this.blueBlackToggle;
                    }
                },
                set: function(setting, value){
                    if(setting==="blueBlackToggle"){
                        this.blueBlackToggle=value;
                    }
                },
                saveAsync: function(){

                }
            }
        }
    }
}

// Create the final mock object from the seed object.
const excelMock = new OfficeMockObject(excelHostMockData);
const officeMock = new OfficeMockObject(officeMockData);

// Define and initialize the Excel object that is called in the changeCellColorYellow function.
global.Excel = excelMock;
global.Office = officeMock;


// Jest test set
describe("format.blueBlackToggle", () => {

    it("should change color to blue or black", async () => {
        await format.blueBlackToggle();        
        expect(excelMock.context.workbook.range.format.font.color).toBe("black");
        
    })

})

Я получаю ошибку

Ошибка, свойство не было загружено

в _callee29 $ (src / format-updated / functions / format.ts: 17: 15)

Похоже, что функция не читает blueBlackToggleSetting при использовании Office.context.document.settings.get("blueBlackToggle"), хотя я думаю, что правильно воссоздал структуру объекта Office. Как структурировать макет объекта Office для доступа к настройкам тестируемой функции? В документации office js очень мало примеров имитации офисного объекта для модульного тестирования, и ни один из примеров не имеет свойств настроек.

1 ответ

Эта ошибка была исправлена ​​в версии 1.0.4. упаковка. Я проверил ваш код с более старой версией и получил ту же ошибку.

Но после обновления пакета до последней версии ошибка была исправлена.

Другие вопросы по тегам