Jest не загружает момент

У меня есть очень простой компонент React, который использует библиотеку моментов:

import React from 'react';
import moment from 'moment';

let { Component } = React;

export class SimpleApp extends Component {
    constructor (props) {
        super(props);
        var currentDate = this.props.data[this.props.current].date;

        this.state = {
            currentDate: currentDate,
            currentFromatted: moment(currentDate).format('dddd, MMMM Do YYYY')
        };
    }

    render() {
        return (
            <div className="simple">{this.state.currentDate}</div>
        );
    }
} 

module.exports = SimpleApp;

И у меня есть этот тест для проверки этого компонента:

import React from 'react/addons';
import SimpleApp from '../js/components/pages/Simple.react';

var TestUtils = React.addons.TestUtils;


jest.dontMock('../js/components/pages/Simple.react');
jest.dontMock('moment');

describe('SimpleApp', () => {
    it('should not do anything', () => {
        var data = {
            "date": "2015-07-01",
            "total": 2,
            "results":[
                {
                    "startTime": "2015-07-01T00:00:00.000",
                    "endTime": "2015-07-01T00:59:59.999",
                    "total": 2,
                    "results":[
                        {
                            "type":"motion",
                            "count":2
                        },
                        {
                            "type":"transaction",
                            "count":0
                        }
                    ]
                }
            ]
        };

        var simple = TestUtils.renderIntoDocument(
            <SimpleApp data={[data]} current="0" />
        );

        var div = TestUtils.findRenderedDOMComponentWithTag(simple, 'div');
        expect(div.getDOMNode().textContent).toEqual('2015-07-01');
    })
})

при запуске npm test я получаю сообщение об ошибке, в котором говорится, что невозможно вызвать метод «формат» неопределенного:

● SimpleApp › it should not do anything
  - TypeError: Cannot call method 'format' of undefined
        at new SimpleApp (/Users/xiaofanyang/workspace/solink/histogram/flux2/js/components/pages/Simple.react.js:13:69)

похоже, что в тот момент над библиотекой издевались, однако я указал не издеваться над ней... но, очевидно, это не помогло...


person Sean Yang    schedule 14.07.2015    source источник


Ответы (2)


Способ, которым мне удалось обойти это, - это сделать

jest.autoMockOff(); 

а затем вручную издеваться над всем, что мне нужно в проекте.

person user3756806    schedule 18.09.2015

Для меня это сработало:

jest.dontMock 'webpack/buildin/module', и мне пришлось поместить момент в unmockedModulePathPatterns в моем package.json — просто размокать его в тесте было недостаточно.

Похоже, что webpack/buildin/module — это загрузчик веб-пакетов, который включен, чтобы в этот момент можно было загрузить какой-то другой модуль. Так что это зависимость от момента, и ее нельзя специально высмеивать. Однако; - Я не совсем понимаю, что он делает. (Хотя это кажется частью ответа: https://github.com/webpack/webpack/issues/333)

person Community    schedule 22.02.2016