gpt4 book ai didi

angularjs - 依赖注入(inject)在 angular/browserify/karma/jasmine 单元测试中不起作用

转载 作者:行者123 更新时间:2023-12-01 02:14:04 24 4
gpt4 key购买 nike

我将 Browserify 与 Angular 结合使用,并使用 Karma 和 Jasmine 进行测试。我正在尝试测试使用 $http 的工厂函数。先来看看工厂:

module.exports = function($http) {
var messageFactory = {};
messageFactory.fetchAll = function(url) {
$http.get(url).success(function() {
console.log('success');
});
}

return messageFactory
}

这是测试:
var angular = require('angular');
var messageFactoryModule = require('./message.factory.js');
require('angular-mocks');


describe('Factory: Message', function() {
var messageFactory;
var $httpBackend;
var url;

beforeEach(inject(function(_$httpBackend_) {
$httpBackend = _$httpBackend_;
messageFactory = new messageFactoryModule();
url = 'http://example.com';
}));

describe('when fetch is called', function() {
it('should fetch messages from the database', function() {
$httpBackend.expectGET(url)
.respond({});

messageFactory.fetchAll(url);

$httpBackend.flush();
});
});
});

当我运行测试时,我收到一个错误,因为工厂中没有定义 $http
TypeError: Cannot read property 'get' of undefined

当我尝试注入(inject) $filter 等其他服务并查看它是否已定义时,我同样会遇到错误。当我在 Angular 应用程序中实际运行 Message.fetchAll 时,一切正常。显然我的测试设置有问题,我只是不知道是什么。

谢谢

最佳答案

我将 beforeEach block 更改为:

  beforeEach(inject(function(_$httpBackend_, $http) {
$httpBackend = _$httpBackend_;
messageFactory = new messageFactoryModule($http);
url = 'http://example.com';
}));

变化是我现在将 $http 传递到模块中。仍然不能 100% 确定这是正确的,但一切似乎都按预期工作。

关于angularjs - 依赖注入(inject)在 angular/browserify/karma/jasmine 单元测试中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26513410/

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