gpt4 book ai didi

angularjs - 使用 Jasmine 和 Karma 在 AngularJS 中对具有依赖性的工厂进行单元测试失败

转载 作者:行者123 更新时间:2023-12-01 03:51:19 25 4
gpt4 key购买 nike

我正在使用 Jasmine 测试 AngularJS 工厂。

我在测试具有依赖性的工厂时遇到了困难。我已经包含了我正在测试的工厂的代码和测试代码。

问题是我收到错误并且测试失败。

这是我看到的错误:

Chrome 33.0.1750 (Mac OS X 10.8.5) Testing my Test Service can get an instance of my factory FAILED
Error: [$injector:unpr] http://errors.angularjs.org/1.2.8/$injector/unpr?p0=TestThisServiceProvider%20%3C-%20TestThisService
at Error (native)
at /Users/.../www/lib/angular/angular.min.js:6:449
at /Users/.../www/lib/angular/angular.min.js:32:125
at Object.c [as get] (/Users/.../www/lib/angular/angular.min.js:30:200)
at /Users/.../www/lib/angular/angular.min.js:32:193
at c (/Users/.../www/lib/angular/angular.min.js:30:200)
at Object.d [as invoke] (/Users/.../www/lib/angular/angular.min.js:30:417)
at workFn (/Users/.../www/lib/angular/angular-mocks.min.js:6:20731)
Error: Declaration Location
at window.inject.angular.mock.inject (/Users/.../www/lib/angular/angular-mocks.min.js:6:20394)
at null.<anonymous> (/Users/.../www/tests/myapp/TestServices/controllers.tests.js:54:43)
at /Users/.../www/tests/myapp/TestServices/controllers.tests.js:1:1
Firefox 27.0.0 (Mac OS X 10.8) Lighting Control Service can get an instance of my factory FAILED
Error: [$injector:unpr] http://errors.angularjs.org/1.2.8/$injector/unpr?p0=TestThisServiceProvider%20%3C-%20TestThisService
F/<@/Users/.../www/lib/angular/angular.min.js:6
$b/l.$injector<@/Users/.../www/lib/angular/angular.min.js:32
c@/Users/.../www/lib/angular/angular.min.js:30
$b/p.$injector<@/Users/.../www/lib/angular/angular.min.js:32
c@/Users/.../www/lib/angular/angular.min.js:30
d@/Users/.../www/lib/angular/angular.min.js:30
workFn@/Users/.../www/lib/angular/angular-mocks.min.js:6
angular.mock.inject@/Users/.../www/lib/angular/angular-mocks.min.js:6
@/Users/.../www/tests/myapp/TestServices/controllers.tests.js:54
@/Users/.../www/tests/myapp/TestServices/controllers.tests.js:1

工厂测试
angular.module('myApp.Module', ["ngResource"])

.factory('TestThisService', function(WebSocketSrvc, $q, $rootScope, $log) {

return {
createData: function(type, msg_object, cb_URI, cbfunction) {
// creates
},
requestData: function(type, cb_URI) {
// requests
},
updateData: function(type, id, msg_object, cb_URI, cbfunction) {
// updates
},
deleteData: function(type, id, cb_URI, cbfunction) {
// deletes
}
}
});

测试代码:
describe("My Service", function() {

// Load your module.
beforeEach(module('myApp.Module','myApp.ModuleTwo'));

// Setup the mock service in an anonymous module.
beforeEach(module(function ($provide) {
$provide.value('WebSocketSrvc', {
variable: 'value',

get: function() {

return 'test';
},

send: function(request, cb_URI) {

return 'result';
}
// ... more functions included not displayed.
});
}));

it('can get an instance of my factory', inject(function(TestThisService) {
expect(TestThisService).toBeDefined();
}));

});

我的问题是我需要做什么才能让我的单元测试成功通过?

最佳答案

在您给您的代码中有 2 个拼写错误,但我想这不是您的真实代码:

  • 测试代码,第 4 行:
    beforeEach(module('MyApp.Module'));

    应该:
    beforeEach(module('myApp.Module'));
  • 第 13 行,您忘记了引用:return 'test';

  • 由于您得到的错误是“TestThisServiceProvider...”,我将使用 $injectorbeforeEach注入(inject)您的服务进行测试。紧接着第二个 beforeEach(module(function(){...});
    beforeEach(inject(function($injector) {
    myService = $injector.get('TestThisService');
    }));

    我认为 $injector 照顾好依赖关系(如 ngResource 在你的情况下)。

    关于angularjs - 使用 Jasmine 和 Karma 在 AngularJS 中对具有依赖性的工厂进行单元测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22460575/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com