2017-07-26 33 views
0

我想測試一個輸入是否存在於ng-if中,而不是ng - 如果測試完全通過但不與ng-if是正常的,因爲ng-if從DOM中移除元素。Angular 1/Jasmine - 測試元素是否存在於ng-if

在我的模板,我有:

<div ng-if="$ctrl.shouldShowAir"> 
    <input class="form-control" type="text"> 
    </div> 

在我的組件

shouldShow() { 
    this.shouldShowAir = (this.parkingType.labelKey === 'parking_type.air') 
    } 

單元測試

import angular from 'angular' 
import 'angular-mocks' 

let scope 
let rootScope 
let compile 
let htmlElement 
let ctrl 

fdescribe('projectExteriorParking',() => { 
    beforeEach(() => { 
    angular.mock.module('ProjectExteriorParkingModule') 
    angular.mock.module('ui.select') 
    }) 

    beforeEach(inject((_$compile_, _$rootScope_) => { 
    rootScope = _$rootScope_ 
    compile = _$compile_ 
    scope = rootScope.$new() 
    scope.parking = {} 
    htmlElement = compile(`<project-exterior-parking parking="project.realEstateProjectProduct.parkings"></project-exterior-parking>`)(scope) 
    rootScope.$digest() 
    })) 

    beforeEach(inject(($componentController) => { 
    let bindings = { 
     parking: {}, 
     projectReferences: {} 
    } 
    ctrl = $componentController('projectExteriorParkingModule', null, bindings) 
    })) 

    it('should contain two input',() => { 
    const inputItems = htmlElement.get(0).querySelectorAll('input') 
    expect(inputItems.length).toBe(2) 
    }) 
}) 

我如何可以模擬變量shouldShowAirtrue

回答

0

你應該寫兩個測試和模擬

this.parkingType.labelKey 

假的第一個測試和測試的輸入視爲無效。 然後將其嘲諷爲假,並測試要定義的輸入。

或者你只寫一個測試,模擬labelKey爲true並運行你現有的測試'應該包含兩個輸入'

相關問題