C'è un modo per ottenere il vero nodo DOM così posso interrogarlo con l'API Dom invece di essere richiesto per usare l'api dell'enzima, è solo per i casi limite dove per esempio ho bisogno di affermare cose sul dom node stesso.come controllare il vero nodo DOM usando l'enzima reattivo
risposta
Se si crea un DOM utilizzando jsdom, qualcosa di simile:
import jsdom from 'jsdom';
const doc = jsdom.jsdom('<!doctype html><html><body></body></html>');
global.document = doc;
global.window = doc.defaultView;
quindi è possibile utilizzare degli enzimi di mount() per rendere tutto ciò che si desidera testare.
È quindi possibile valere nei confronti dello stile che stai cercando:
expect(wrapper).to.have.style("display", "none");
Forse siete alla ricerca di enzima di instance()?
const wrapper = mount(<input type="text" defaultValue="hello"/>)
console.log(wrapper.instance().value); // 'hello'
PS:
instance()
dovrebbe darvi una ReactComponent
, da cui è possibile utilizzare ReactDOM.findDOMNode (ReactComponent) per ottenere un DOMNode. Tuttavia, quando ho fatto che, come la seguente, è stato esattamente lo stesso oggetto come wrapper.instance()
:
import ReactDOM from 'react-dom'
const wrapper = mount(<input type="text" defaultValue="sup"/>)
console.log(ReactDOM.findDOMNode(wrapper.instance()) == wrapper.instance()) // true
Non capisco perché. Se si console.log()
uno di quelli, vedrete un HTMLInputElement
, ma conterrà un sacco di roba nodo DOM non nativa cercando:
HTMLInputElement {
'__reactInternalInstance$yt1y6akr6yldi':
ReactDOMComponent {
_currentElement:
{ '$$typeof': Symbol(react.element),
type: 'input',
key: null,
ref: null,
props: [Object],
_owner: [Object],
_store: {} },
Quando ho provato la tua tecnica, sembrava funzionare come previsto. In altre parole, 'ReactDOM.findDOMNode (wrapper.instance())! = Wrapper.instance()'. FWIW, sto usando React 15 e Enzyme 2.3.0. – killthrush
Mi chiedo se è perché stavo usando jsdom (o, credo di esserlo, sciocco non ho un permalink per il codice che ho eseguito). Stai usando jsdom? –
Sì, sto usando jsdom 9.1.0 - scusate ho dimenticato di dire che – killthrush
mi sono imbattuto in questo stesso problema. Nel mio caso, stavo testando qualcosa costruito con react-aria-modal
, che rende il div overlay in una parte diversa del DOM rispetto all'elemento iniziale reso con mount()
. Per verificare che questo renda correttamente, avevo bisogno di guardare più globalmente al DOM. Per questo, ho utilizzato l'opzione attachTo
di render()
per garantire che il mio DOM di test sia come dovrebbe in un browser reale. Here è una buona descrizione generale della tecnica dai documenti.
A seconda di cosa è necessario, è possibile utilizzare l'approccio di Tyler Collier per più parti locali del DOM (findDOMNode
utilizzando instance()
) o il mio per una vista più globale.
Ecco una specifica campione per il mio caso d'uso, che mostra come installare/uso/teardown il DOM finto:
import MyModalComponent from '../components/my-modal-component'
import React from 'react'
import { jsdom } from 'jsdom'
import { mount } from 'enzyme'
describe('<MyModalComponent /> Component', function(){
let wrapper
beforeEach(function(){
window.document = jsdom('')
document.body.appendChild(document.createElement('div'))
})
afterEach(function(){
wrapper.detach()
window.document = jsdom('')
})
it('renders the modal closed by default',() => {
wrapper = mount(
<MyModalComponent prop1={"foo"}
prop2={"bar"}
/>, { attachTo: document.body.firstChild }
)
expect(wrapper.html()).to.contain('Content in component')
expect(document.body.innerHTML).to.not.contain('Content in overlay')
})
})
È possibile utilizzare soemething come:
const dialog = component.find(Modal);
let modal = dialog.node._modal;
modal.getDialogElement().querySelector('#saveBtn')
in base al test per modale nelle reagiscono-bootstrap sito
https://github.com/react-bootstrap/react-bootstrap/blob/master/test/ModalSpec.js
Sembra che questa funzionalità è stata aggiunta di recente, si può fare wrapper.getDOMNode()
- 1. jQuery ottiene il nodo DOM?
- 2. In JQuery, come posso controllare se il DOM è pronto?
- 3. Seleziona il prossimo nodo del nodo selezionato in PHP DOM?
- 4. Controllare l'ereditarietà nel nodo
- 5. Come recuperare il testo di un nodo di testo DOM?
- 6. Come caricare un file javascript nel DOM usando il selenio?
- 7. Controllare se isset ed è vero?
- 8. Ottieni il nodo di testo DOM dal punto?
- 9. Append personalizzato a un nodo DOM
- 10. Come trovare listener di eventi su un nodo DOM usando JavaScript
- 11. come controllare genitore del nodo corrente è il nodo radice o non in xslt?
- 12. Come elencare tutti gli eventi registrati di un nodo DOM usando Javascript?
- 13. Come utilizzare il modulo nodo modificato usando il ramo github?
- 14. Qual è il punto su usando% unità in design reattivo?
- 15. Come navigare nel DOM usando Nokogiri
- 16. Controllare il tipo di nodo nel modello XSL
- 17. Drupal modulo, controllare se il tipo di nodo
- 18. Come funziona la pulizia del nodo DOM in d3?
- 19. Come posso aggiungere un nodo sotto un nodo usando ObjectContentManager?
- 20. YUI 3: Come ottenere l'elemento DOM nativo avvolto nel nodo?
- 21. Come copiare un nodo DOM con listener di eventi?
- 22. Come creare un layout orizzontale reattivo usando i CSS?
- 23. Come installare più pacchetti gulp contemporaneamente usando il nodo?
- 24. Come ottenere il valore dell'attributo dal nodo usando xpath?
- 25. Come controllare il numero di caratteri diversi usando regex?
- 26. Usando il C# NHunspell come posso controllare le parole?
- 27. Come posso controllare il certificato client usando Snap
- 28. Come controllare il modello di iPhone usando swift
- 29. Controllare se la SDCard è presente, boolean è sempre vero
- 30. Come controllare la larghezza dell'eco usando Sweave
Sto usando monto che utilizza jsdom a quanto ho capito, già ma come si otterrebbe nodo DOM del involucro reale in modo da poter utilizzare l'API dom ? per esempio per interrogare className ma * not * usando prop ('className') – njorlsaga
Potrebbe esserci un modo migliore, ma puoi sempre chiamare '.html()' sull'elemento, e poi usare qualcosa come 'DOMParser()': http://stackoverflow.com/questions/3103962/converting-html-string-into-dom-elements – Ryan27