$componentController
サービスでコントローラを作成した後で、コンポーネントの$onChanges
をテストしたかったのですが、しかし、私はどのようにトリガー/テスト$onChanges
を知りませんでした。私は$componentController
に渡されたバインディングオブジェクトを変更しようとしましたが、変更はピケッティングされませんでした。
describe("test component", function() {
angular.module('test', []).component('component', {
template: '<span>{{$ctrl.text}}</span>',
bindings: {
'text': '@'
},
controller: function() {
this.$onChanges = function(changesObj) {
console.log("onChanges called", changesObj);
}
}
})
var $compile, $rootScope;
beforeEach(module('test'));
beforeEach(inject(function (_$rootScope_, _$compile_) {
$rootScope = _$rootScope_;
$compile = _$compile_;
}));
it('should call onChanges', function() {
var scope = $rootScope.$new()
scope.text = 'original text';
var el = $compile('<component text="{{text}}" />')(scope);
$rootScope.$apply();
console.log(el.find('span').text())
scope.text = 'text has changed';
$rootScope.$apply();
console.log(el.find('span').text())
})
})
私の質問は次のとおりです:$componentController
と$onChanges
をテストするとき、私は手動で$onChanges
を呼び出し、手動changesObj
を構築しなければならないの私は$compile
& $rootScope
古き良きを使用して同じことを行うことができたしかし
?
_ "手動で$ onChangesを呼び出して、手動でchangesObjをビルドする必要はありますか?"実際に行うことができます。だから私はあなたの質問に混乱している。 – zeroflagL