棱角分明的茉莉花,试图测试工厂功能
angular jasmine, trying to test a factory function
我真的很陌生,第一次尝试单元测试。我有以下模块:
var app = angular.
module('webportal',
[
'vr.directives.slider',
'angular-flexslider',
'LocalStorageModule',
'multi-select',
'djds4rce.angular-socialshare'
]).run(function ($FB) {//facebook share...should we move this somewhere else?
$FB.init('xxxxx')
});
以及以下两家工厂:
angular.module('webportal').factory('uri', function () {
var uri = {};
uri.base = '';
uri.setBase = function (base) {
uri.base = base;
};
uri.getBase = function () {
return uri.base;
}
return uri;
});
app.factory('portal', ['uri', function (uri) {
var portal = {};
portal.getLink = function (id) {
return uri.getBase() + langHalf + '/property/' + id;
};
return portal;
}])
我正在尝试对 uri 和门户工厂内的函数进行单元测试。
这是我的尝试:
describe('Unit: Factory Test', function () {
var uri;
beforeEach(function () {
angular.mock.module('vr.directives.slider', []);
angular.mock.module('angular-flexslider', []);
angular.mock.module('LocalStorageModule', []);
angular.mock.module('multi-select', []);
angular.mock.module('djds4rce.angular-socialshare', []);
module('webportal', [
'vr.directives.slider',
'angular-flexslider',
'LocalStorageModule',
'multi-select',
'djds4rce.angular-socialshare'
]);
beforeEach(module('uri'));
});
it("baseSettingTest", function () {
var uri = new uri();
//var uri = new uri;
var baseSettingTest = 'testing base';
uri.setBase(baseSettingTest);
expect(uri.getBase()).toEqual(baseSettingTest);
})
})
所以当我运行这个时,它会失败并出现以下错误:
FAILED Unit: Factory Test baseSettingTest
TypeError: undefined is not a function
at Object.<anonymous> (http://localhost:9876/base/tests/portaltestjs/portal.test.js:50:19)
at attemptSync (http://localhost:9876/base/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:1759:24)
at QueueRunner.run (http://localhost:9876/base/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:1747:9)
at QueueRunner.execute (http://localhost:9876/base/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:1733:10)
at Spec.Env.queueRunnerFactory (http://localhost:9876/base/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:569:35)
at Spec.execute (http://localhost:9876/base/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:318:10)
at Object.fn (http://localhost:9876/base/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:2072:43)
at attemptAsync (http://localhost:9876/base/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:1789:24)
at QueueRunner.run (http://localhost:9876/base/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:1745:16)
at QueueRunner.execute (http://localhost:9876/base/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:1733:10)
window.__karma__.result
specDone
dispatch
(anonymous function)
specResultCallback
complete
clearStack
QueueRunner.run
QueueRunner.execute
Env.queueRunnerFactory
Spec.execute
fn
attemptAsync
QueueRunner.run
QueueRunner.execute
Env.queueRunnerFactory
Suite.execute
fn
attemptAsync
QueueRunner.run
QueueRunner.execute
Env.queueRunnerFactory
Suite.execute
allFns.push.fn
attemptAsync
QueueRunner.run
QueueRunner.execute
Env.queueRunnerFactory
Env.execute
env.executeFiltered
(anonymous function)
window.__karma__.loaded
(anonymous function)
Skipped 0 tests
很明显,我没有正确初始化 uri。
- 如何初始化 uri 工厂? 并尝试测试函数?
- 如何初始化门户工厂并尝试测试函数?
您需要注入服务,然后可以在该服务上调用方法,这是我在我的 ng-样板项目中如何做到这一点的:
beforeEach(module('ng-boilerplate'));
var NameService;
beforeEach(inject(function (_NameService_) {
NameService = _NameService_;
}));
describe('#formatName()', function() {
it('should title case a given string', function() {
expect(NameService.formatName('IAN')).to.equal('Ian');
// ...etc...
您必须为"uri"模板添加引用的第一件事
describe('Unit: Factory Test', function () {
var uri;
beforeEach(function () {
angular.mock.module('vr.directives.slider', []);
angular.mock.module('angular-flexslider', []);
angular.mock.module('LocalStorageModule', []);
angular.mock.module('multi-select', []);
angular.mock.module('djds4rce.angular-socialshare', []);
module('webportal', [
'vr.directives.slider',
'angular-flexslider',
'LocalStorageModule',
'multi-select',
'djds4rce.angular-socialshare'
]);
//beforeEach(module('uri')); please comment out this line
beforeEach(module('webportal')) //you should load module instead of load your factory
});
// Use below block code to inject your factory into uri variable
beforeEach(inject(function (_$injector_) {
uri = _$injector_.get('uri'); //Inject uri factory into uri variable
}));
// For now your uri factory available for testing
it("baseSettingTest", function () {
spyOn(uri, 'setBase'); //spy on you setBase function
var baseSettingTest = 'testing base';
uri.setBase(baseSettingTest);
expect(uri.getBase).toHaveBeenCalled(); //Make sure getBase function was called
})
})
我修改了您的代码中的某些内容,可以帮助您
相关文章:
- Jasmine测试工厂函数调用本地函数和另一个函数-获取错误:应该是间谍,但得到了function
- jasmine 2.0测试angularjs的工厂方法,这是一个承诺
- 如何将工厂注入单元测试
- 如何使用在 AngularJS 中返回承诺的$resource测试工厂
- 使用模拟工厂在茉莉花中测试嵌套承诺
- 棱角分明的茉莉花,试图测试工厂功能
- AngularJS工厂在Karma与Jasmine进行测试
- 用Karma测试angularjs的工厂
- 单元测试工厂茉莉花-西农
- 茉莉:我怎么能声明一个循环'其'而不是'期望'用于测试有角度的工厂
- 如何在使用Jasmine测试工厂时模拟$compile函数
- 测试Angular.js控制器,而不使用Jasmine嘲笑工厂
- 单元测试服务不;t注入工厂
- 测试服务从$resource使用工厂与Karma
- 用Karma (Jasmine)测试AngularJS工厂
- 如何测试一个使用$http返回$timeout承诺的AngularJS工厂方法.进入
- 在Angular.js中测试模块控制器、工厂、服务等
- 用Mocha测试工厂
- Jasmine和AngularJS-当函数用作依赖项时,如何测试工厂函数
- 如何测试工厂