2017-04-21 4 views
0

Ich habe eine LoginInfo Komponente und unter dieser Komponente rufe ich eine weitere Kindkomponente auf. Ich versuche Einheitstest für die Komponenten zu schreiben, indem ich Test-, Enzym- und Reaktions-Tests verwende. teilweise habe ich die testfälle geschrieben aber nicht sicher wie ich test für untergeordnete komponente schreiben kann (LoginInfoEdit). Diese Linie kann ich nicht abdecken.Reactjs Komponententest

import React from 'react'; 
import { LoginInfoEdit } from './LoginInfoEdit' 

class LoginInfo extends React.Component { 
constructor(props) { 
    super(props) 
    this.state = { 
     isLoginInfo: false 
    } 
} 
openEdit() { 
    this.setState({ isLoginInfo: true }) 
} 

closeEdit() { 
    this.setState({ isLoginInfo: false }) 
} 
OpenEditForUpdate(e) { 
    e.preventDefault(); 
    this.openEdit(); 
} 
render() { 
    return (
     <div> 
      <form>      
       <div> 
        some text 
       </div> 

       <LoginInfoEdit loginid={this.props.loginid} openloginedit={this.state.isLoginInfo} onClose={this.closeEdit.bind(this)}>       
       </LoginInfoEdit> 
      </form> 
     </div> 
    ) 
} 
} 
export default LoginInfo 

Unit-Test ist Below --------

import React from 'react' 
import { shallow } from 'enzyme'; 
import LoginInfo from './LoginInfo' 
import LoginInfoEdit from './LoginInfoEdit' 

const props = { 
loginid: "1", 
openloginedit: false, 
}; 
describe('LoginInfo component',() => { 
let LoginInfo = null; 
let editButton = null; 

beforeEach(() => { 
    LoginInfo = shallow(<LoginInfo {...props}/>); 
    editButton = LoginInfo.find('button[name="edit"]') 
}) 

it('checks everything set properly',() => { 
    editButton.simulate('click', { preventDefault:() => { } }); 
    expect(LoginInfo.state('isloginedit')).toEqual(true) 
}) 
it('renders child',() => { 
    expect(LoginInfo.find('LoginInfoEdit').length).toEqual(1) 
}); 
it('passes proper props to the child',() => { 
    const expected = { 
    loginid: "1", 
    openloginedit: false, 
    onClose: LoginInfo.instance().closeEdit.bind(this), 
}; 

expect(LoginInfo.find('LoginInfoEdit').props()).toEqual(expected) 
}) 
}) 

Antwort

1

der Regel in solchen Fällen Ich kümmere mich nur um zu prüfen, ob wir das Kind machen und geben Requisiten wir auf das Kind wie wünschen:

let component; 

const props = someProps; 

beforeEach(() => { component = mount(<LoginInfo { ..props } />); }); 

it('renders child',() => { 
    expect(component.find('LoginInfoEdit').length).to.eql(1) 
}); 

it('passes proper props to the child',() => { 
    const expected = { 
    loginid: someVal, 
    openloginedit: someotherVal, 
    onClose: component.instance().closeEdit, 
    }; 

    expect(component.find('LoginInfoEdit').props()).to.eql(expected) 
}); 

und dann teste ich gerade die Kinder (in diesem Fall LoginInfoEdit) getrennt von der Mutter

+0

Vielen Dank für Ihre Antwort bu t erhalten und erwartet ist anders erwartet Ich bekomme - "onClose": [Funktion closeEdit], und in erhalten bekomme ich - "onClose": [Funktion onClose], so ist es nicht machchniing. aufgrund dieses Tests – user2768132

+0

von der Ausgabe fehlschlägt es scheint, als ob Sie verschiedene Funktionen oder anderen Namen der Funktion an das erwartete Objekt übergeben. – beniutek

+0

Danke für Ihre Antwort. Aus der Ausgabe scheint es, aber ich gebe den gleichen Namen wie yo im Beispiel erwähnt..aber nach dem Error bekam ich es in onClose geändert: component.instance(). CloseEdit.bind (this). dann bekam ich "Unterschied: Vergleichswerte haben keinen visuellen Unterschied." Error. und Testfall schlägt fehl. nicht sicher, was das Problem ist. – user2768132