javascript - 如何对 Angular 1.5 组件模板进行单元测试?

标签 javascript angularjs unit-testing jasmine karma-jasmine

所以,这是我的测试:

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 变量,它也会使用组件(或 Controller )上的变量。

关于如何在测试中更改组件变量的任何想法,所以当我编译模板时它会捕获这些更改。

基本上我想要的是能够访问和修改 Controller 变量,这样我就可以根据 Controller 变量值测试某些输出。这有意义吗?

最佳答案

scope.foo 不影响组件绑定(bind)。 foo 范围属性不是 foo 属性。

这可能应该像这样测试

var component = $compile('<my-component foo="{{ foo }}">')(scope);

scope.$digest();

var componentScope = component.isolateScope();

expect(component.html())...
expect(componentScope.$ctrl.foo)...

关于javascript - 如何对 Angular 1.5 组件模板进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41624014/

相关文章:

java - 无法解析符号 PowerMockRunner

javascript - 如何将 javascript 选取框增加到网站的大小?

javascript - 如何通过单击按钮将动态行添加到表中,并使用 Ember 使现有行在单击时可编辑

javascript - D3 中的两个 csv http URL 数据相同的图表

javascript - 将重复的查询参数推送到 Vue 路由器

AngularJS 指令在资源加载之前初始化

angularjs - Selenium Webdriver和angular e2e有什么区别?何时应分别使用?

angular - Angular 中十进制验证器的单元测试

javascript - 作用域函数未接收回调参数

javascript - 使用 Jest,获取内部函数