Académique Documents
Professionnel Documents
Culture Documents
DESIGN & UX
FRONT-END
DEV
BD
MOBILE
MARKETING
GESTO
APIS
SEARCH
INFRA
TECH
E-COMMERCE
ANALYTICS
Incio
>
Front-End
>
JavaScript
>
Tw eetar
Like
Share
JAVASCRIPT
Falei recentemente sobre a injeo de dependncia para ajudar voc a entender uma forma simples de separar um pouco o seu cdigo e ajudar a test-lo. s vezes, porm, em Node.js, um mdulo vai depender de uma API de sistema fornecida pelo Node, o que pode tornar muito difcil de certificar que a dependncia privada est sendo usada corretamente. A injeo de dependncia normal no funciona nessa situao, mas no perca a esperana ainda.
LTIMAS NOTCIAS
28/01 S 05H40
A soluo
Graas a este artigo, uma soluo muito decente e completa pode ser apresentada a voc agora. Se voc gostar dela, ento, por favor, agradea d crditos ao Vojta Jina em How to Node. Abaixo est o cdigo: v a rv m=r e q u i r e ( ' v m ' ) ; v a rf s=r e q u i r e ( ' f s ' ) ; v a rp a t h=r e q u i r e ( ' p a t h ' ) ; / * * *H e l p e rf o ru n i tt e s t i n g : *l o a dm o d u l ew i t hm o c k e dd e p e n d e n c i e s *a l l o wa c c e s s i n gp r i v a t es t a t eo ft h em o d u l e * *@ p a r a m{ s t r i n g }f i l e P a t hA b s o l u t ep a t ht om o d u l e( f i l et ol o a d )
imasters.com.br/front-end/javascript/injecao-de-dependencia-com-node-js-melhores2013/
28/01/14
*@ p a r a m{ O b j e c t = }m o c k sH a s ho fm o c k e dd e p e n d e n c i e s * / e x p o r t s . l o a d M o d u l e=f u n c t i o n ( f i l e P a t h ,m o c k s ){ m o c k s=m o c k s| |{ } ; / /t h i si sn e c e s s a r yt oa l l o wr e l a t i v ep a t hm o d u l e sw i t h i nl o a d e df i l e / /i . e .r e q u i r i n g. / s o m ei n s i d ef i l e/ a / b . j sn e e d st ob er e s o l v e dt o/ a / s o m e v a rr e s o l v e M o d u l e=f u n c t i o n ( m o d u l e ){ i f( m o d u l e . c h a r A t ( 0 )! = =' . ' )r e t u r nm o d u l e ; r e t u r np a t h . r e s o l v e ( p a t h . d i r n a m e ( f i l e P a t h ) ,m o d u l e ) ; } ; v a re x p o r t s={ } ; v a rc o n t e x t={ r e q u i r e :f u n c t i o n ( n a m e ){ r e t u r nm o c k s [ n a m e ]| |r e q u i r e ( r e s o l v e M o d u l e ( n a m e ) ) ; } , c o n s o l e :c o n s o l e , e x p o r t s :e x p o r t s , m o d u l e :{ e x p o r t s :e x p o r t s } } ; v m . r u n I n N e w C o n t e x t ( f s . r e a d F i l e S y n c ( f i l e P a t h ) ,c o n t e x t ) ; r e t u r nc o n t e x t ; } ; Voc tambm pode baixar o trecho de cdigo diretamente aqui. Embora possa no ser a maior parte do cdigo j postado em um artigo, ele poderia ter alguma explanao. Quando estamos testando, carregamos esse mdulo no teste e depois usamos a funo loadModule em vez de require para carregar o mdulo que vamos testar. O primeiro argumento, filePath, especifica onde vamos encontrar o mdulo que vamos testar. O segundo argumento, mocks, contm um objeto cujos nomes da propriedade iro corresponder aos nomes dos mdulos que o mdulo que estamos testando vai tentar usar require. O valor atribudo a essas propriedades so os objetos de simulao que voc est usando para substituir os mdulos que normalmente usariam require. Basicamente, tudo o que ele faz utilizar vm para carregar e executar o mdulo usando um contexto diferente. Em outras palavras, ns recriamos o que os globais so (como require e exports) para que possamos control-los. A primeira coisa a se observar aqui a nova funo require que disponibilizamos. Tudo que ela faz verificar se temos uma dependncia de simulao para o nome especificado e, se no tivermos, ns apenas delegamos a funo require normal.
DESTAQUES
LABORATRIO DE SCRIPTS PHP Participe do laboratrio pblico e colaborativo de scripts PHP criado pelos moderadores e participantes do Frum PHP iMasters
iMasters
Like
28/01/14
/ /am o c kf o r` f s ` } ; / /l o a dt h em o d u l ew i t hm o c kf si n s t e a do fr e a lf s m o d u l e=l o a d M o d u l e ( ' . / w e b s e r v e r . j s ' ,{ f s :f s M o c k } ) ; } ) ; i t ( ' s h o u l dw o r k ' ,f u n c t i o n ( ){ / /at e s tt h a tu t i l i z e st h ef a c tt h a tw ec a nn o wc o n t r o l` f s ` } ) ; } ) ; A principal coisa para se prestar ateno aqui so nas linhas 7 a 12, onde criamos um mock de objetos para fs e usamos a nossa nova funo loadModule para prend-lo no que o objeto que est sendo utilizado em nosso mdulo sem valor acima (quero dizer, incrvel! Lembre-se, incrvel, n?).
Concluso
Na minha cabea, isso s fortalece a grandeza de Node.js. Ele permite que voc altere o contexto no qual executado! Essa uma maneira muito interessante de emular injeo de dependncia, e eu tenho certeza de que ele pode ser til para muito mais coisas. De qualquer forma, continue testando e usando as boas prticas. *** Texto original disponvel em http://www.joezimjs.com/javascript/dependency-injectionwith-node-js/
Artigos relacionados
PM2 mantendo o node.js no ar
JavaScript
Comente! Comente!
Comente!
Joe Zim desenvolvedor web e j trabalhou em vrias frentes: HTML, CSS, JavaScript, jQuery, PHP, Joomla, WordPress, Node.js. Atualmente, trabalha via home office para a empresa eInnov8/Vistelar/Martial Arts Marketing Network. Pgina do autor Email Leia os ltimos artigos publicados por Joe Zim Injeo de dependncia com Node.js #Melhores2013 Configurando um ambiente de teste unitrio Jasmine com Testem #Melhores2013 Atualizao para Backbone 1.0 conhea algumas novidades Arquiteturas assncronas de JavaScript: Events vs Promises Usando Marionette para exibir Modal Views
imasters.com.br/front-end/javascript/injecao-de-dependencia-com-node-js-melhores2013/
3/4
28/01/14
Twitter
Siga o perfil do iMasters
LinkedIn
Cadastre-se no grupo iMasters
gitHub
Cdigos iMasters DEV
RSS
Assine os feeds
SOCIAL MEDIA
Copyright 2014 Todos os direitos reservados
NEWSLETTER
Fique por dentro de todas as novidades, eventos, cursos, contedos exclusivos e muito mais.
faleconosco@imasters.com.br
imasters.com.br/front-end/javascript/injecao-de-dependencia-com-node-js-melhores2013/
4/4