2015-11-04 57 views
0

我想测试一个指令,其中通过我的一段代码观察一个属性:

function linkFn(scope, element, attrs) { 

     attrs.$observe('myattr', function() { 
      console.log('do something'); 

我有一个测试,这是否:

var html = '<my-directive></my-directive>'; 
var scope; 
var element; 

beforeEach(module('app', function($provide) {})); 
beforeEach(inject(function($injector, $compile, $rootScope) { 
    scope = $rootScope.$new(); 
    element = $compile(angular.element(html))(scope); 
})); 

describe('after being compiled', function() { 

    it('my test', function() { 
     element[0].setAttribute('myattr', 'hello'); 
     console.log(element); // shows that myattr is set properly 
     scope.$digest(); 
     // the console.log is not triggered, why? 
    }); 

回答

0

好吧,这是不同的:您必须将属性添加到指令:

var html = '<my-directive myattr=""></my-directive>'; 

http://plnkr.co/edit/I2nngQtEUyxBbcGrdtTJ?p=preview

+0

不幸的是,这是行不通的。我的意思是做美元消化这可以称为美元无论如何,但仍然尝试美元适用于自己,没有运气。 –

+0

我编辑了我的答案 – Maarten

+0

仍然不起作用。唯一的输出是来自初始页面加载,而不是来自单元测试。 –

0

通常,我更愿意给变更处理程序一个名称(使其成为指令的成员,或者更好地将所有逻辑放入嵌入式控制器中),然后在测试中直接调用它。否则,你正在测试角度的基础设施,它不会给你带来任何好处。单元测试应该相信框架能够工作(这就是我们使用mock的原因)并测试自己的代码。功能和集成测试会告诉你是否已经建立了正确的框架。

相关问题