javascript - AngularJS 单元测试业力 - 未知的提供者
问题描述
我正在尝试在我们的旧 AngularJS 应用程序上设置单元测试。我正在使用标准业力和 angular-mock 来设置测试用例。Unknown provider
但是当我尝试注入一些服务和工厂时,我遇到了问题。我的 karma.conf 看起来像这样(为简洁起见,我删除了很多东西)
module.exports = function(config) { config.set({
basePath: '',
// frameworks to use
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
frameworks: ['jasmine'],
// list of files / patterns to load in the browser
files: [
'./node_modules/angular/angular.js',
"http://cf._____.com/content/myfootprints/js/priorityqueue.js",
"http://cf._____.com/content/myfootprints/js/ng-flow-standalone.js",
INCLUDED ALL THE DEPENDENCIES HERE
'./node_modules/angular-mocks/angular-mocks.js',
'./static/js/app/main.js',
'./static/tests/**/*.js'
]
preprocessors: {
'./static/js/app/**/main.js':['webpack', 'sourcemap'],
'./static/js/app/**/*.js':['webpack', 'sourcemap'],
},
在我们的应用程序中,我们有一个 main.js,它使用 and 将所有控制器和工厂导入到应用程序imports
中requireDir
。它看起来像这样
const requireDir = require('webpack-requiredir');
import './isocurrency.js';
import './myfp_uirouter.js';
import './infobubble.js';
// other imports
requireDir(require.context('./controllers', true, /.*\.js$/))
requireDir(require.context('./directives', true, /.*\.js$/))
requireDir(require.context('./factories', true, /.*\.js$/))
requireDir(require.context('./filters', true, /.*\.js$/))
我有一个带有单元测试的文件,看起来像这样
describe('Unit test file, function(){
var generalUtilFactory;
beforeEach(inject(function($injector){
generalUtilFactory = $injector.get('generalUtilsFactory'); <--- getting unknown provider
// Also tried to inject it in
//via function($rootScope,... _generalUtilFactory_)
}));
Other code
.
.
.
.
});
现在我确实有通过 main.js 导入并在 app 模块中注册的通用 util 工厂。我检查在调试器中看到它。看起来像这样
angular.module('app').factory('generalUtilsFactory', ['$timeout', '$filter', 'FileSaver', 'Blob', function($timeout, $filter, FileSaver, Blob) {
var generalUtilsFactory = {};
generalUtilsFactory.getKeys = function(o){
我不太确定这里发生了什么。所有需要的文件都已包含在内,并且所有 es6 都已正确转换。在这方面的一些帮助将不胜感激
解决方案
我认为您需要在注入服务之前注入主模块。也许做这样的事情会有所帮助:
describe('Service Tests', function () {
beforeEach(module('app'));
var _generalUtilsFactory;
beforeEach(inject(function (generalUtilsFactory) {
_generalUtilsFactory = generalUtilsFactory
}));
});
推荐阅读
- javascript - 为什么在浏览器中查看页面源时,我在 WordPress 站点头部中注入的脚本代码似乎在标签之外?
- c# - 如何通过 C# 使用 Fhir R4 添加遭遇
- html - 在 django 中将远程 HTML 模板转换为 PDF
- flutter - 错误:当使用健全的空安全性时,默认情况下库不能选择退出空安全性
- python - 在 Pandas 数据框中使用 python 的 CAGR 输出不正确
- sql - 没有 SQL 列信息的 SQL TABLE 到 JSON
- python - 如何修复读取json文件时出现的错误,python3.7
- html - 如何使用 jquery 编辑数组值?
- nginx - nginx 反向代理,只允许某些文件扩展名
- aws-cli - 什么会导致 -bash: /usr/bin/aws: 没有这样的文件或目录?