У меня возникли некоторые проблемы с юнит-тестами для приложения Angular, предназначенного для надстройки для Outlook.
Сам код работает нормально без ошибок, но тесты обычно терпят неудачу.
Я получаю следующие ошибки:
ReferenceError: Office is not defined
ReferenceError: fabric is not defined
Тесты не пройдены при любом методе, использующем Office.js или Fabric.Так, например, если метод был следующим:
public getName() {
this.item = Office.context.mailbox.item;
return this.item.from.displayName;
}
Сбой с ошибкой, что офис не определен.
И Office, и Fabric добавляются в приложение через индекс.HTML-файл:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Firefish Outlook Addin</title>
<base href="/AddinClient/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://static2.sharepointonline.com/files/fabric/office-ui-fabric-js/1.4.0/css/fabric.min.css" />
<link rel="stylesheet" href="https://static2.sharepointonline.com/files/fabric/office-ui-fabric-js/1.4.0/css/fabric.components.min.css" />
<script src="assets/js/fabric.js"></script>
<script src="https://appsforoffice.microsoft.com/lib/1/hosted/Office.js" type="text/javascript"></script>
</head>
<body>
<app-root></app-root>
</body>
</html>
И офис в частности инициализируется в файле main.ts:
import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './modules/app/app.module';
import { environment } from './environments/environment';
if (environment.production) {
enableProdMode();
}
Office.initialize = function () {
platformBrowserDynamic()
.bootstrapModule(AppModule)
.catch(err => console.error(err));
};
Я искал в Интернете возможные решения и, к сожалению, не могу найти ни одного.Мой файл Karma.conf.js выглядит следующим образом:
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma')
],
client: {
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, '../coverage'),
reports: ['html', 'lcovonly'],
fixWebpackSourcePaths: true
},
Files: ["https://appsforoffice.microsoft.com/lib/1/hosted/Office.js"],
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false
});
};
, а мой файл tsconfig.spec.json выглядит следующим образом:
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/spec",
"types": [
"jasmine",
"node",
"@types/office-js"
]
},
"files": [
"test.ts",
"polyfills.ts"
],
"include": [
"**/*.spec.ts",
"**/*.d.ts",
"../node_modules/office-ui-fabric-js/src/components/Dropdown/Dropdown.ts",
"../node_modules/office-ui-fabric-js/src/components/Button/Button.ts",
"../node_modules/office-ui-fabric-js/src/components/TextField/TextField.ts",
"../node_modules/office-ui-fabric-js/src/components/RadioButton/RadioButton.ts",
"../node_modules/office-ui-fabric-js/src/components/Spinner/Spinner.ts",
"../node_modules/office-ui-fabric-js/src/components/ProgressIndicator/ProgressIndicator.ts"
]
}
Поэтому я добавляю необходимые ссылки нафайлы для Office и Fabric.
Это тот случай, когда мне нужно создать макеты Office и Fabric?