2016-06-02 2 views
0

Я читаю и практикую учебник: http://teropa.info/blog/2015/09/10/full-stack-redux-tutorial.html Но я не мог пройти тесты на редуктор. Затем я сделал новый тест, чтобы узнать причину.Путаница после установки свойства карты

Вот что test.js (мокко с Chai):

import {expect} from 'chai'; 
import {List, Map, fromJS} from 'immutable'; 

describe('set',() => { 
    it('sets map\'s property',() => { 
    const state = Map(); 
    const action = {type: 'SET_ENTRIES', entries: ['Trainspotting']}; 
    const nextState = state.set('entries', action.entries); 

    /* 
    expect(nextState).to.equal(Map({ 
     entries: ['Trainspotting'] 
    })); 
    */ 
    expect(nextState).to.equal(fromJS({ 
     entries: ['Trainspotting'] 
    })); 
    }); 
}); 

Либо использовать карту или fromJS, тест не проходит

Если выбрать "Карта", он показывает:

AssertionError: expected 'Map { "entries": Trainspotting }' to equal 'Map { "entries": Trainspotting }' 
    + expected - actual 

Если выбрать "fromJS", он показывает:

AssertionError: expected 'Map { "entries": Trainspotting }' to equal 'Map { "entries": List [ "Trainspotting" ] }' 
    + expected - actual 

    -Map { "entries": Trainspotting } 
    +Map { "entries": List [ "Trainspotting" ] } 

Это действительно сбивает с толку. Как заставить его работать?

ответ

0

ли вы попробовать

const nextState = state.set('entries', List(action.entries)); 
+0

Я попробовал это только сейчас, как вы сказали, со вторым «ожидать» заявление (fromJS). Оно работает. Но почему? Означает ли это, что учебник, упомянутый выше, неверен? – Slimpothive

+0

Когда вы устанавливаете свои записи следующим образом: state.set («entries», action.entries), action.entries - это простой массив, не являющийся неизменным списком. С другой стороны, вы не можете сравнить его с JS ({ записей: ['Trainspotting'] }). Он создаст экземпляр списка экземпляров. Это сила от JS() –

+0

Это имеет смысл. Большое спасибо! – Slimpothive

Смежные вопросы