我有一个像这样的控制器。
app.controller('MyCtrl', function() {
let ctrl = this;
if (ctrl.contract) {
ctrl.contract.typeId = ctrl.contract.type.id;
} else {
ctrl.contract = {
name: 'test'
};
}
....
它可以拥有或不拥有contract
我的测试中出现了问题
describe('MyCtrl', () => {
let ctrl;
beforeEach(angular.mock.module('mymodule'));
beforeEach(angular.mock.module('ui.router'));
describe('Update contract', () => {
beforeEach(inject((_$controller_) => {
ctrl = _$controller_('MyCtrl', {}, {
contract: {
type: {
id: 2
}
}
});
}));
it('should set the contract.typeId to be the id of the type of the contract that was sent in', () => {
expect(ctrl.contract.typeId).toBe(ctrl.contract.type.id);
});
})
});
我传入一个合同对象,这意味着它应该进入我控制器中的第一个if
并设置typeId
。
但无论我做什么,它总会进入else
。
如何在所有变量绑定到控制器之前确保控制器不运行或启动?
答案 0 :(得分:0)
我认为问题在于您需要直接获取$ controller服务并传递有效范围(不是空对象)
beforeEach(inject(function ($rootScope, $controller) {
scope = $rootScope.$new();
ctrl = $controller('MyCtrl', {
$scope: scope,
}, {
contract: {
type: {
id: 2
}
}
});
}));