Экземпляр возвращает NULL для подключенного компонента при монтировании в Jest - PullRequest
0 голосов
/ 25 марта 2019

Я относительно новичок, чтобы реагировать и извиняюсь за любые термины, которые не соответствуют жаргону.

Я пытаюсь протестировать метод-прототип подключенного компонента, который состоит из переменной ref, как показано ниже:

app.js

export class Dashboard extends React.Component { // Exporting here as well
  constructor(props) {
    this.uploadFile = React.createRef();

    this.uploadJSON = this.uploadJSON.bind(this);
  }

  uploadJSON () { 
     //Function that I am trying to test
     //Conditions based on this.uploadFile
  }
render() {
    return (
      <div className="dashboard wrapper m-padding">
        <div className="dashboard-header clearfix">
          <input
            type="file"
            ref={this.uploadFile}
            webkitdirectory="true"
            mozdirectory="true"
            hidden
            onChange={this.uploadJSON}
            onClick={this.someOtherFn}
          />
        </div>
        <SensorStatList />
        <GraphList />
      </div>
    );
  }

  const mapStateToProps = state => ({
    //state
  });

  const mapDispatchToProps = dispatch => ({
    //actions
  });

  export default connect(
    mapStateToProps,
    mapDispatchToProps
  )(Dashboard);
}

Здесь SensorStatList и GraphList - это функциональные компоненты, также подключенные с использованием избыточности.

После некоторого исследования у меня есть тестовый файл до этого уровня:

app.test.js

import { Dashboard } from '../Dashboard';
import { Provider } from 'react-redux';
import configureStore from '../../../store/store';

const store = configureStore();

export const CustomProvider = ({ children }) => {
    return (
      <Provider store={store}>
        {children}
      </Provider>
    );
  };

describe("Dashboard", () => {

    let uploadJSONSpy = null;

    function mountSetup () {
        const wrapper = mount(
                <CustomProvider>
                  <Dashboard />
                </CustomProvider>
              );
        return {
            wrapper
        };
    }

    it("should read the file", () => {
        const { wrapper } = mountSetup();
        let DashboardWrapper = wrapper;

        let instance = DashboardWrapper.instance();

        console.log(instance.ref('uploadFile')) // TypeError: Cannot read property 'ref' of null
    })

Может кто-нибудь помочь мне понять, почему эта ошибка

console.log (instance.ref ( 'uploadFile')) // TypeError: Невозможно прочитать свойство 'ref' из null

всплывает? Кроме того, если этот подход хорошо? Если нет, то какие варианты лучше?

1 Ответ

1 голос
/ 25 марта 2019

wrapper - это CustomProvider, который не имеет экземпляра, а ref должен работать с устаревшими ссылками на строки.

В случае, если ссылка должна быть доступна на Dashboard, это может быть:

wrapper.find(Dashboard).first().instance().uploadFile.current

В случае доступа к входной оболочке это может быть:

wrapper.find('input').first()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...