gpt4 book ai didi

angularjs - 如何使用 karma/jasmine 在 angularAMD 中模拟服务?

转载 作者:行者123 更新时间:2023-12-04 08:55:20 28 4
gpt4 key购买 nike

我有一个使用 AngularAMD/RequireJS/Karma/Jasmine 的项目,我的基本配置一切正常,大多数单元测试运行并成功通过。

我无法使用 angular.mock.module 或 angularAMD.value() 正确注入(inject)模拟服务。

我有:

// service definition in services/MyService.js
define(['app'],
function(app) {
app.factory('myService', [ '$document', function($document) {
function add(html) {
$document.find('body').append(html);
}
return { add: add };
}]);
}
);


// test
define(['angularAMD', 'angular-mocks', 'app', 'services/MyService'],
function(aamd, mocks, app) {
describe('MyService', function() {
var myBodyMock = {
append: function() {}
};
var myDocumentMock = {
find: function(sel) {
// this never gets called
console.log('selector: ' + sel);
return myBodyMock;
}
};
var svc;
beforeEach(function() {
// try standard way to mock a service through ng-mock
mocks.module(function($provide) {
$provide.value('$document', myDocumentMock);
});
// hedge my bets - try overriding in aamd as well as ng-mock
aamd.value('$document', myDocumentMock);
});
beforeEach(function() {
aamd.inject(['myService',
function(myService) {
svc = myService;
}]);
});
it('should work', function() {
// use svc expecting it to have injected mock of $document.
spyOn(myDocumentMock, 'find').andCallThrough();
spyOn(myBodyMock, 'append');
svc.add('<p></p>');
expect(myDocumentMock.find).toHaveBeenCalledWith('body');
expect(myBockMock.append).toHaveBeenCalledWith('<p></p>');
});
});
}
);

有谁知道我要去哪里错?任何帮助将非常感激。

最佳答案

Angular 不是异步的,我认为两者都不是一个好主意。如果你想找到一个好的模块化方法,好吧,但是在你把它放在你的浏览器上之前使用 RequireJS 优化器来构建所有东西,关于测试,我认为你可以在之前使用 RequireJS 优化器来构建你的模块,它会让你摆脱“即使在测试中的 CommonJS 环境”。

关于angularjs - 如何使用 karma/jasmine 在 angularAMD 中模拟服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26424205/

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