【发布时间】:2015-06-29 12:02:28
【问题描述】:
我正在尝试为 angularcontroller 编写业力单元测试,这是控制器。使用此处的文件上传 (https://github.com/nervgh/angular-file-upload):
var c, di;
c = function($scope, FileUploader, UploadHelper, currentUser) {
var uploader;
$scope.uploader = uploader = new FileUploader(UploadHelper.getOptions());
uploader.onSuccessItem = function(item, response, status, headers) {
//do something
};
return this;
};
di = [ '$scope', 'FileUploader', 'UploadHelper', 'currentUser', c];
angular.module('mycontrollers').controller('DocumentsController', di);
我的茉莉花测试是这样的:
describe('Customer: Controller: DocumentsController', function() {
var $rootScope, DocumentMock, UserMock, documentsController, scope;
documentsController = $rootScope = scope = DocumentMock = UserMock = null;
beforeEach(function() {
module("mycontrollers");
return inject(function($controller, _$rootScope_, $q) {
var deferred, documents, fileUploader, uploadHelper, user;
$rootScope = _$rootScope_;
scope = $rootScope.$new();
documents = [
{
id: "doc 1",
documentType: "other"
}, {
id: "doc 2",
documentType: "pdf"
}, {
id: "doc 3",
v: "pdf"
}
];
user = {
id: 'user_id',
username: 'username'
};
UserMock = {
currentUser: function() {
return user;
}
};
fileUploader = {};
uploadHelper = {};
return documentsController = $controller('DocumentsController', {
documents: documents,
$scope: scope,
FileUploader: fileUploader,
UploadHelper: uploadHelper,
currentUser: UserMock
});
});
});
return describe("On creation", function() {
return it("should assign documents to scope", function() {
return expect(1).toEqual(1);
});
});
});
我有一个名为 QuestionsAttachments 的服务,它有一些依赖项:
s = function(API, $http, $q, $timeout) {
var QuestionsAttachments;
return QuestionsAttachments = (function() {
function QuestionsAttachments(data) {
angular.extend(this, data);
}
QuestionsAttachments["new"] = function(data) {
return new QuestionsAttachments(data);
};
return QuestionsAttachments;
})();
};
di = ['API', '$http', '$q', '$timeout', s];
这个问题是:我怎样才能模拟出 API ,$http, $q, $timeout ?
这是一个 plunkr 的链接: http://plnkr.co/edit/BT8SJgW6ejcPw6xo1cpI?p=preview
【问题讨论】:
-
同样的方法,你只需选择 api/service 和一个方法并在其上放置一个 spy。请再看看我的回答。此外,由于您犯了几个错误,因此您 plunkr 无法正常工作。这是为您工作的plunkr。
-
这个 plunkr 是正确的:plnkr.co/edit/BT8SJgW6ejcPw6xo1cpI?p=preview
-
我不知道你在哪里。在您的 plunkr 中,您尝试注入
someservice但这不存在。此外,在您的new:function(){}块中,您正在尝试更新QuestionsAttachements,但这也不存在。您已将工厂函数命名为lekker,因此通过将其重命名为 QuestionsAttacments 并删除 someservice 的注入,您就可以看到真正的问题。虽然我建议你阅读angulars dependency injection。我在下面给您的答案几乎可以满足您的所有需求。
标签: angularjs unit-testing karma-jasmine