我正在尝试在Controller上运行单元测试,但我遇到以下错误:
Expected undefined to be defined.
我知道什么是未定义的,但我不知道为什么它是未定义的以及如何解决这个问题。 让我粘贴我的代码以便更好地理解。
控制器
angular
.module("app.licensing", [])
.controller("LicensingController", LicensingController)
LicensingController.$inject = ["textService"];
function LicensingController(textService) {
var vm = this;
vm.licForm = {
accountName: null,
ticketNo: null
};
vm.controlLabels = textService.licensing.controlLabels;
}
textService Text Service基本上只包含字符串的Object并返回一个Object。
(function () {
"use strict";
angular
.module('app')
.factory("textService", textService)
function textService() {
return {
//Object for Licensing Module
licensing: {
pageTitle: "Page Title",
controlLabels: {
accountName: "Account Name",
ticketNo: "Ticket No",
hostId: "Host Id",
}
}
};
}
})();
单元测试
describe("-----> LicensingController", function () {
var LicensingController;
var textService;
beforeEach(angular.mock.module("app.licensing"));
beforeEach(function () {
module(function ($provide) {
$provide.value("textService", textService);
});
});
beforeEach(inject(function (_$controller_) {
LicensingController = _$controller_("LicensingController", {
});
}));
describe("-----> Licensing Form", function () {
it("--> License Controller should be Defined.", function () {
expect(LicensingController).toBeDefined();
});
it("--> 'licForm' Object must be Defined.", function () {
expect(LicensingController.licForm).toBeDefined();
});
it("--> 'controlLabels' Object must be Defined.", function () {
expect(LicensingController.controlLabels).toBeDefined();
});
});
});
答案 0 :(得分:1)
您没有在textService
的{{1}}中注入模拟LicensingController
。添加它,它应该开始工作。
beforeEach
您还需要删除第二个beforeEach(inject(function (_$controller_, _textService_) {
LicensingController = _$controller_("LicensingController", { textService: _textService_ });
}));
或至少在其中提供beforeEach
的模拟实现。
textService