2016-03-16 6 views
2
  • я пытаюсь написать тест для файла JSX в этом я смог пройти proptypes
  • ...
  • , но не там, где я прошел proptypes propely ...
  • я получаю сообщение об ошибке, когда я запускаю мой тестовый случай ..
  • обеспечивая свою ошибку, тест, и код ниже ...
  • TypeError: не удается прочитать свойство «существует» неопределенных
  • не знаю, как заставить его работать с этим существует ..
  • его happing в этой функции dispatchSidebarExists ..
  • вы можете сказать мне, как я должен нужно положить его в моем тесте

Javascript ошибкаTypeError: Не удается прочитать свойство «существует» неопределенной

1) shallow renderer tests for sports-template-standard should render correctly: 
    TypeError: Cannot read property 'exists' of undefined 
     at [object Object].dispatchSidebarExists (/src/sports-template-standard.jsx:80:56) 
     at [object Object].componentWillMount (/src/sports-template-standard.jsx:49:14) 
     at [object Object].ReactCompositeComponentMixin.mountComponent (\node_modules\react\lib\ReactCompositeComponent.js:210:12) 
     at [object Object].wrapper [as mountComponent] (\node_modules\react\lib\ReactPerf.js:66:21) 
     at [object Object].ReactShallowRenderer._render (\node_modules\react\lib\ReactTestUtils.js:362:14) 
     at [object Object].ReactShallowRenderer.render (\node_modules\react\lib\ReactTestUtils.js:344:8) 
     at Context.<anonymous> (/test/sports-template-standard-tests.js:31:25) 
     at callFn (\node_modules\mocha\lib\runnable.js:286:21) 
     at Test.Runnable.run (\node_modules\mocha\lib\runnable.js:279:7) 
     at Runner.runTest (\node_modules\mocha\lib\runner.js:421:10) 
     at \node_modules\mocha\lib\runner.js:528:12 
     at next (\node_modules\mocha\lib\runner.js:341:14) 
     at \node_modules\mocha\lib\runner.js:351:7 
     at next (\node_modules\mocha\lib\runner.js:283:14) 
     at Immediate._onImmediate (\node_modules\mocha\lib\runner.js:319:5) 

тестовые

`javascript` 
import {expect} from 'chai'; 
import React from 'react'; 
import TestUtils from 'react-addons-test-utils'; 
import initializeJsDom from './test-utils/dom.js'; 
import {SportsPageClasses} from 'sports-css-grids'; 
import sportsMockUpStandard from '../src/sports-template-standard'; 

describe('shallow renderer tests for sports-template-standard ', function() { 
    let shallowRenderer = TestUtils.createRenderer(); 
    console.log("shallowRenderer" + JSON.stringify(shallowRenderer)); 

    it('should render correctly',() => { 

     //var rightPanel ="some string"; 
     var layout ="some string";   
     var hasSidebar = function(){ 
      done(); 
     } 
     console.log("here1"); 
     //this.props.layout.rightPanel.exists = 'some value'; 

     shallowRenderer.render(<sportsMockUpStandard 
      headerClass='8887' 
      layout= {{id: 100, text: 'hello world'}} 
      sidebar= {[{hasSidebar},{id: 100, text: 'hello world'}]} 
      title={"Demo"} />); 

     // shallowRenderer.render(<sportsMockUpStandard 

     //layout= {{id: 100, text: 'hello world'}} />); 

     console.log("here2"); 
    }); 
}); 

фрагмент кода

`javascript`  
dispatchSidebarExists(props) { 
    let hasSidebar = !!props.sidebar; 

    // infinite loop without this check 
    if (hasSidebar !== this.props.layout.rightPanel.exists) { 
     this.props.dispatch(setSportsCornerState({ 
      exists: hasSidebar 
     })); 
    } 
} 

весь код

export function setSportsCornerState(stateString) { return { type: 'SET_HEADERPANEL', stateString }; } ``` 

новое предупреждение

Warning: Failed propType: Invalid prop `sidebar` supplied to `sportsMockUpStandard`. 


// var rightPanel ="some string"; 
     var layout ="some string"; 

     var hasSidebar = function(){ 
      // done(); 
    } 
     console.log("here1"); 
     // this.props.layout.rightPanel.exists = 'some value'; 

     shallowRenderer.render(<sportsMockUpStandard 
      headerClass='8887' 
      layout= {{rightPanel: {exists: hasSidebar}, text: 'hello world'}} 
      sidebar= {[{hasSidebar},{id: 100, text: 'hello world'}]} 
      title={"Demo"} dispatch={hasSidebar} />); 
+0

@all почему вы, ребята, отметили это отрицательно ... так как я тоже пробовал и вставлял свой код :( –

+0

Можете ли вы опубликовать код для 'setSportsCornerState'? Он возвращает объект с свойством полезной нагрузки? выглядят как редукционная отправка, которую я когда-либо видел, у них обычно есть действие и полезная нагрузка, но я думаю, что материал возвращается этим методом? Потому что, если нет, я уверен, что это ваша проблема. – OceansOnPluto

+0

@OceansOnPluto привет спасибо за ваш ответить ... Я немного запутался о ваших ... предоставлении объяснений моего кода ниже '' ' функция экспорта setSportsCornerState (stateString) { возвратных { типа: 'SET_HEADERPANEL', stateString }; } '' ' –

ответ

1

В принципе, ваш редуктор каллусов ng имущество exists о состоянии, не так ли? Но это не находит? Это потому, что вы отправили объект, но не добавили полезную нагрузку.

Ваш код говорит, что вы отправляете объект следующим образом.

setSportsCornerState(stateString) { 
    return { type: 'SET_HEADERPANEL', stateString }; 
} 

Учитывая ваш код здесь ....

this.props.dispatch(setSportsCornerState({ 
      exists: hasSidebar 
     })); 

.... Это означает, что объект вы диспетчерская будет выглядеть следующим образом.

{ type: 'SET_HEADERPANEL', {exists: hasSidebar} } 

Я на самом деле не знает, как свойство прибудет по имени в этом случае, если у вас есть объект и другой объект внутри него без имени свойства. Это, как говорится, это то, что должен выглядеть ваш объект.

 { type: 'SET_HEADERPANEL', payload: {exists: hasSidebar} } 

Если вы хотите передать информацию редуктору, вам необходимо передать его через свойство полезной нагрузки. Ваш объект всегда должен иметь полезную нагрузку, и эта полезная нагрузка всегда должна быть объектом. Измените свой код на следующее.

export function setSportsCornerState(stateString) { 
    return { type: 'SET_HEADERPANEL', payload: stateString }; 
} 

Этот объект представляет собой полезную нагрузку в качестве информации, которую вы хотите передать.Затем ваш редуктор должен искать свойство exists на объекте полезной нагрузки.

+0

спасибо за ваш ответ ... можете ли вы обновить нижеследующую строку для тестового примера https: // gist .github.com/js08/dfeab2df8b68240297eb –

+0

Я имею в виду, что на самом деле это не так, как работает этот сайт, как правило, вы пытаетесь его увидеть, если он работает, и если он принимает мой ответ. Но вам нужно изменить код. тестовый случай будет всегда терпеть неудачу, если вы не добавите свойство полезной нагрузки, потому что redux не был настроен для работы каким-либо другим способом. – OceansOnPluto

+0

хорошо ... но эта строка в тестовом коде, как должно мне нужно изменить '' ' врезке = {[{hasSidebar}, {ID: 100, текст: 'привет мир'}]} ' '' –