Você está na página 1de 4

28/01/14

Portal Frum 7Masters Ferramentas

Injeo de dependncia com Node.js - #Melhores2013 | iMasters


Cursos online Agenda Revista iMasters InterCon Faa Login / Cadastre-se

+ de 11.000 artigos tcnicos publicados em 12 anos

Faa sua busca

DESIGN & UX

FRONT-END

DEV

BD

MOBILE

MARKETING

GESTO

APIS

SEARCH

INFRA

TECH

E-COMMERCE

ANALYTICS

Voc est aqui:

Incio

>

Front-End

>

JavaScript

>

Injeo de dependncia com Node.js #Melhores2013

Tw eetar

Like

Share

JAVASCRIPT

Injeo de dependncia com Node.js #Melhores2013


03 de janeiro de 2014 por Joe Zim

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

require Causes Issues


O Node.js tornou muito fcil a importao das dependncias via require. Ele funciona muito bem e mais simples do que os carregadores do mdulo AMD, como RequireJS. O problema entra em cena quando queremos simular essas dependncias. Se o carregamento do mdulo for controlado atravs de Node.js, como que vamos assumir essa responsabilidade para permitir que objetos de simulao sejam usados durante o teste? Ns podemos usar o mdulo vm do Node e carregar os mdulos em um novo contexto, atravs vm.runInNewContext, onde podemos controlar a forma como require devolve mdulos.

Google Glass ganha modelos para lentes de grau


28/01 S 04H35

Apesar do aumento da velocidade da Internet, Brasil cai para 84 em ranking mundial


28/01 S 04H00

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/

LinkedIn libera pesquisa que revela o perfil dos usurios no Brasil


28/01 S 03H40

NSA intercepta dados de usurios de apps mveis


28/01 S 02H30

Mercado de smartphones ultrapassa marca de 1 bilho de aparelhos vendidos em 2013


TODAS AS NOTCIAS
1/4

28/01/14

Injeo de dependncia com Node.js - #Melhores2013 | iMasters

*@ 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

IMASTERS BOX Catlogo completo de ferramentas online para auxlio de desenvolvedores.

LABORATRIO DE SCRIPTS PHP Participe do laboratrio pblico e colaborativo de scripts PHP criado pelos moderadores e participantes do Frum PHP iMasters

Exemplo utilizando o carregador de mdulo


Se voc ainda est um pouco confuso, voc pode dar uma olhada no exemplo de cdigo abaixo e v-lo utilizado em contexto pode ajud-lo a entender as coisas um pouco melhor. Primeiro, vamos criar um mdulo simples. v a rf s=r e q u i r e ( ' f s ' ) ; m o d u l e . e x p o r t s={ / /D os o m e t h i n gw i t h` f s ` } Apenas imagine que algo legal, ok? Enfim, agora queremos testar esse mdulo, mas queremos fazer uma simulao fs para ver como ele est sendo usado internamente. / /J a s m i n e ' ss y n t a xh t t p : / / p i v o t a l . g i t h u b . c o m / j a s m i n e / d e s c r i b e ( ' s o m e M o d u l e ' ,f u n c t i o n ( ){ v a rl o a d M o d u l e=r e q u i r e ( ' m o d u l e l o a d e r ' ) . l o a d M o d u l e ; v a rm o d u l e ,f s M o c k ; b e f o r e E a c h ( f u n c t i o n ( ){ f s M o c k={
imasters.com.br/front-end/javascript/injecao-de-dependencia-com-node-js-melhores2013/ 2/4
Find us on Facebook

iMasters
Like

76,463 people like iMasters.

Facebook social plugin

28/01/14

Injeo de dependncia com Node.js - #Melhores2013 | iMasters

/ /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

Geocoding no Google Docs: limites GeoJSON com Koordinates


APIs, JavaScript

Vdeo: JavaScript idiomtico


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

Injeo de dependncia com Node.js - #Melhores2013 | iMasters

QUAL A SUA OPINIO?

Escreva seu comentrio aqui...

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.

Sobre o iMasters Poltica de Privacidade Fale conosco

faleconosco@imasters.com.br

Seu nome Seu e-mail ENVIAR

imasters.com.br/front-end/javascript/injecao-de-dependencia-com-node-js-melhores2013/

4/4

Você também pode gostar