2015-01-31 9 views
7

Próbuję wykonać niektóre TDD na aplikacji React, które buduję. Korzystanie z jest Mogę przetestować funkcję renderowania, aby zobaczyć, czy otrzymuję to, czego oczekuję, aby uzyskać renderowanie. Co jeśli chcę przetestować jakąś inną funkcję w klasie? Jak mogę to załatwić? Na przykład o to React klasa:Jak przetestować funkcje inne niż renderowanie w klasie React za pomocą jest?

var moment = require('moment'); 
var React = require('react'); 
var utils = require('./utils'); 

module.exports = React.createClass({ 
    days: function() { 
     var days = []; 
     var nextMonth = this.daysFromNextMonth(days, numberOfDays); 
     return days; 
    }, 
    daysFromNextMonth: function(days, numberOfDays) { 
     ... 
    }, 
    render: function() { 
     var that = this; 
     var days = this.days().map(function(day, i) { 
      return <li key={day}>{day}</li> 
     return (
      <ul className='monthly-view'> 
       {days} 
      </ul> 
     ); 
    } 
}); 

chcę chwycić trzymać moich days lub daysFromNextMonth funkcji i sprawdzić, czy są one powrocie co by się spodziewać. Próbowałem w jest się trzymać funkcji tak:

it('should show an render', function() { 
    var result = DailyView.daysFromNextMonth(day, 10) 
    .... 
}); 

My error mówi, że nie mam metodę daysFromNextMonth. Jak to naprawić?

Odpowiedz

10

trzeba renderować składnik odwołać metody na nim (zbliżonych do instancji klasy przed użyciem metody instancji):

var view = TestUtils.renderIntoDocument(<DailyView />) 
var result = view.daysFromNextMonth(day, 10) 

Następnie można wywołać dowolną z metod instancji.

0

Połączenie jest i enzyme powinno załatwić sprawę. Sprawdź dokumentację jest DOM testing i enzyme.

Podstawowy pomysł polegający na tym, że można użyć enzyme do płytkiego renderowania komponentów i manipulowania nimi.

2

Używając enzymu znalazłem to odniesienie do testowania funkcji komponentu, https://github.com/airbnb/enzyme/issues/208.

const component = shallow(<MyComponent />); 
component.instance().foo(); 

Musisz uzyskać instancję komponentu, zanim będziesz mógł wywołać jego metody, ale to zadziałało.

Powiązane problemy