2014-10-29 5 views
1

테스트 맞춤 각도 구성 요소를 테스트 중입니다. 구성 요소 클래스 상태를 확인하고 싶습니다. 내가 콘솔에서 디버깅 -각도 다트 테스트, 범위가 비어 있습니다.

내 범위는 항상 비어 :

  1. 를 사용하여 웹 구성 요소 xtag

문제점 범위에 구성 요소를 가져 오기 :이 A에 대한 두 가지 옵션이 있습니다 나는 카르마를 사용하여 브라우저에서 테스트를 실행합니다. 내 속성에 액세스 할 수 있도록 는 HTMLElement 클래스를 반환 xtag

코드 (다트에 캐스팅?) :

library vader.panel_spec; 
import '../_specs.dart'; 
import "package:vader/components/vader_component.dart"; 

    main(){ 
    describe('Tests for Panel UI',(){ 
     TestBed _; 
     Scope _scope; 
     Element ngAppElement; 
     beforeEach(async(inject((TestBed tb, Scope scope, VmTurnZone zone, TemplateCache cache) { 
     _ = tb; 
     _scope = scope; 
     addToTemplateCache(cache, 'packages/vader/components/panel.html'); 
     addToTemplateCache(cache, 'packages/vader/components/window/window.html'); 

     }))); 
     beforeEachModule((Module module) { 
     ngAppElement = new DivElement()..attributes['ng-app'] = ''; 
     module 
      ..install(new VaderComponentModule()); 
     module..bind(Node, toValue: ngAppElement); 
     document.body.append(ngAppElement); 
     }); 
     afterEach(() { 
     ngAppElement.remove(); 
     ngAppElement = null; 
     }); 
     compile(html) { 
     ngAppElement.setInnerHtml(html, treeSanitizer: new NullTreeSanitizer()); 
     _.compile(ngAppElement); 
     return ngAppElement.firstChild; 
     } 

     it("should collapse when clicked", async((){ 
     Element panel = compile("<v-panel>CollapsedItem</v-panel>"); 
     microLeap(); 
     _.rootScope.apply(); 
     Element contentPanel = panel.querySelector('.content-panel'); 
     expect(contentPanel.classes.contains('collapse'), isFalse); 
     _.triggerEvent(panel.querySelector('#collapse-icon'), 'click'); 
     _.rootScope.apply(); 
     window.console.debug(_.rootScope.context); 
     var comp = panel.xtag; 
     expect(comp.doCollapse, isTrue); 
     })); 


    }); 

    } 


library ng_specs; 

import 'dart:html' hide Animation; 

import 'package:angular/angular.dart'; 
import 'package:angular/mock/module.dart'; 

import 'package:guinness/guinness_html.dart' as gns; 

export 'dart:html' hide Animation; 
export 'package:unittest/unittest.dart' hide expect; 
export 'package:guinness/guinness_html.dart'; 

export 'package:mock/mock.dart'; 
export 'package:di/di.dart'; 
export 'package:di/dynamic_injector.dart'; 
export 'package:angular/angular.dart'; 
export 'package:angular/application.dart'; 
export 'package:angular/introspection.dart'; 
export 'package:angular/core/annotation.dart'; 
export 'package:angular/core/registry.dart'; 
export 'package:angular/core/module_internal.dart'; 
export 'package:angular/core_dom/module_internal.dart'; 
export 'package:angular/core/parser/parser.dart'; 
export 'package:angular/core/parser/lexer.dart'; 
export 'package:angular/directive/module.dart'; 
export 'package:angular/formatter/module.dart'; 
export 'package:angular/routing/module.dart'; 
export 'package:angular/animate/module.dart'; 
export 'package:angular/mock/module.dart'; 
export 'package:perf_api/perf_api.dart'; 

es(String html) { 
    var div = new DivElement(); 
    div.setInnerHtml(html, treeSanitizer: new NullTreeSanitizer()); 
    return new List.from(div.nodes); 
} 

e(String html) => es(html).first; 


Expect expect(actual, [matcher]) { 
    final expect = new Expect(actual); 
    if (matcher != null) { 
    expect.to(matcher); 
    } 
    return expect; 
} 

class Expect extends gns.Expect { 
    Expect(actual) : super(actual); 

    NotExpect get not => new NotExpect(actual); 

    toBeValid() => _expect(actual.valid && !actual.invalid, true, 
    reason: 'Form is not valid'); 

    toBePristine() => _expect(actual.pristine && !actual.dirty, true, 
    reason: 'Form is dirty'); 

    get _expect => gns.guinness.matchers.expect; 
} 

class NotExpect extends gns.NotExpect { 
    NotExpect(actual) : super(actual); 

    toBeValid() => _expect(actual.valid && !actual.invalid, false, 
    reason: 'Form is valid'); 

    toBePristine() => _expect(actual.pristine && !actual.dirty, false, 
    reason: 'Form is pristine'); 

    get _expect => gns.guinness.matchers.expect; 
} 


_injectify(fn) { 
    // The function does two things: 
    // First: if the it() passed a function, we wrap it in 
    //  the "sync" FunctionComposition. 
    // Second: when we are calling the FunctionComposition, 
    //   we inject "inject" into the middle of the 
    //   composition. 
    if (fn is! FunctionComposition) fn = sync(fn); 
    return fn.outer(inject(fn.inner)); 
} 

// Replace guinness syntax elements to inject dependencies. 
beforeEachModule(fn) => gns.beforeEach(module(fn), priority:1); 
beforeEach(fn) => gns.beforeEach(_injectify(fn)); 
afterEach(fn) => gns.afterEach(_injectify(fn)); 
it(name, fn) => gns.it(name, _injectify(fn)); 
iit(name, fn) => gns.iit(name, _injectify(fn)); 

_removeNgBinding(node) { 
    if (node is Element) { 
    node = node.clone(true) as Element; 
    node.classes.remove('ng-binding'); 
    node.querySelectorAll(".ng-binding").forEach((Element e) { 
     e.classes.remove('ng-binding'); 
    }); 
    return node; 
    } 
    return node; 
} 
/** 
* It adds an html template into the TemplateCache. 
*/ 
void addToTemplateCache(TemplateCache cache, String path) { 
    HttpRequest request = new HttpRequest(); 
    request.open("GET", path, async : false); 
    request.send(); 
    cache.put(path, new HttpResponse(200, request.responseText)); 
} 


main() { 
    gns.beforeEach(setUpInjector, priority:3); 
    gns.afterEach(tearDownInjector); 

    gns.guinnessEnableHtmlMatchers(); 
    gns.guinness.matchers.config.preprocessHtml = _removeNgBinding; 
} 

답변

1

사용 ngInjector(panel).get(PanelComponent) 또는 ngDirectives(panel)[0]. 설명서 here을 참조하십시오.