【发布时间】:2017-01-12 22:17:50
【问题描述】:
所以,这是我的测试:
describe('My Test', function(){
var $componentController, $compile, controller, scope;
beforeEach(inject(function($injector, $rootScope, $templateCache){
$templateCache.put('my-component.html', '<h1>{{ $ctrl.foo }}</h1>');
$componentController = $injector.get('$componentController');
var bindings = {
foo: 'A Foo'
};
scope = $rootScope.$new();
controller = $componentController('myComponent', { $scope: {} }, bindings);
}));
it('should render the correct html', function(){
scope.foo = 'Changed Foo';
var element = angular.element(
'<my-component foo="Original Foo"></my-component>'
);
var template = $compile(element)(scope);
scope.$digest();
var templateAsHtml = template.html();
console.log(templateAsHtml);
};
}
我得到的是“Original Foo”,而不是“Changed Foo”。因此,即使我在测试中更改了scope.foo 变量,它也会使用组件(或控制器)上的那个。
所以关于如何在测试中更改组件变量的任何想法,所以当我编译模板时它会捕获这些更改。
基本上我想要的是能够访问和修改控制器变量,因此我可以根据控制器变量值测试某些输出。这有意义吗?
【问题讨论】:
-
你没有贴出组件的代码,这里有必要。很难相信
{{ foo }}会导致Original Foo,因为组件模板应该使用$ctrl.foo(或任何controllerAs)。 -
组件模板使用
$ctrl.foo(我已经在帖子中更改了)并且绑定与我测试的相同,因此无需在此处放置额外的代码
标签: javascript angularjs unit-testing jasmine karma-jasmine