Angular Testing "Office is not defined"

标签 angular unit-testing karma-jasmine office-js

我正在尝试为用 Angular 6 编写的 Excel 插件添加持续集成。我正在使用 Karma 和 Jasmine。当我运行测试时,每个测试都通过了,但随后出现以下错误:

Chrome 68.0.3440 (Windows 10 0.0.0) ERROR
{
"message": "An error was thrown in afterAll\nUncaught ReferenceError: Office is not defined",
"str": "An error was thrown in afterAll\nUncaught ReferenceError: Office is not defined"
}

这是我的package.json:

{
  "name": "top-secret",
  "version": "0.0.0",
  "license": "MIT",
  "scripts": {
    "ng": "ng",
    "start": "ng serve --ssl true --port 3000",
    "build": "ng build --prod",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  },
  "private": true,
  "dependencies": {
    "@angular/animations": "^6.1.0",
    "@angular/cdk": "^6.4.2",
    "@angular/common": "^6.1.0",
    "@angular/compiler": "^6.1.0",
    "@angular/core": "^6.1.0",
    "@angular/forms": "^6.1.0",
    "@angular/http": "^6.1.0",
    "@angular/material": "^6.4.2",
    "@angular/material-moment-adapter": "^6.4.2",
    "@angular/platform-browser": "^6.1.0",
    "@angular/platform-browser-dynamic": "^6.1.0",
    "@angular/router": "^6.1.0",
    "core-js": "^2.5.7",
    "intl": "^1.2.5",
    "jquery": "^3.3.1",
    "moment": "^2.22.2",
    "ng2-daterangepicker": "^2.0.12",
    "npm": "^6.3.0",
    "rxjs": "^6.2.2",
    "rxjs-compat": "^6.0.0-rc.0",
    "saturn-datepicker": "^6.0.5",
    "zone.js": "^0.8.19"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "^0.7.2",
    "@angular/cli": "^6.1.2",
    "@angular/compiler-cli": "^6.1.0",
    "@angular/language-service": "^6.1.0",
    "@types/jasmine": "^2.8.8",
    "@types/jasminewd2": "~2.0.2",
    "@types/jquery": "^3.3.5",
    "@types/node": "^10.5.5",
    "@types/office-js": "0.0.101",
    "codelyzer": "^4.4.2",
    "jasmine-core": "^3.2.1",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "^3.0.0",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "^2.0.1",
    "karma-jasmine": "^1.1.2",
    "karma-jasmine-html-reporter": "^1.2.0",
    "karma-phantomjs-launcher": "^1.0.4",
    "phantomjs-prebuilt": "^2.1.16",
    "protractor": "~5.4.0",
    "ts-node": "~7.0.0",
    "tslint": "~5.11.0",
    "typescript": "^2.9.2"
  }
}

karma.conf.js:

// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html

module.exports = function (config) {
  config.set({
    basePath: '',
    frameworks: ['jasmine', '@angular-devkit/build-angular'],
    plugins: [
      require('karma-jasmine'),
      require('karma-chrome-launcher'),
      require('karma-phantomjs-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
    },

    reporters: ['progress', 'kjhtml'],
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['Chrome', 'PhantomJS'],
    singleRun: false
  });
};

最佳答案

如何加载 Office.js? (“据我所知,它们通过脚本元素加载”)

无论如何,实际的代码是有益的,但我可以直接和盲目地想到的是,当您运行测试时,这些测试是异步运行的,并且 Office.js 当时尚未加载!确保在测试之前加载 Office.JS。

关于 Angular Testing "Office is not defined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51968210/

相关文章:

javascript - 在运行时向 Angular 2 中的 DOM 添加新的组件元素不会呈现组件

javascript - 使用 ng-template 清空 native 元素

c# - 使用最小起订量模拟 EF DbContext

python - 使用路径模拟 os.path.dirname

visual-studio - Visual Studio 无法运行单元测试(调用 executor 'executor://nunit3testexecutor/' 时发生异常)

angular - 如何为 Angular react 形式的自定义验证器编写单元测试用例?

angular - Angular 5.2 测试中的 Jasmine 3 错误

angular - 如何在 Angular 2 的不同服务中订阅可观察对象

angular - 类型具有私有(private)属性模拟服务单元测试 Angular 7 的单独声明

angular - 使用导入模块对 angular2 组件进行单元测试