2016-04-13 3 views
1

Я использую узел/Redux и я следующее при тестировании с Chai:неизменная ошибка Chai Assertion в то время как ожидается, равно результат

AssertionError: expected 'Map { "winos": List [ Map { "id": 1, "x": 1, "y": 1, "movable": false }, Map { "id": 2, "x": 2, "y": 2, "movable": false }, Map { "id": 5, "x": 5, "y": 5, "movable": false } ] }' 
       to equal 'Map { "winos": List [ Map { "id": 1, "x": 1, "y": 1, "movable": false }, Map { "id": 2, "x": 2, "y": 2, "movable": false }, Map { "id": 5, "x": 5, "y": 5, "movable": false } ] }' 

Я видел, что это известная ошибка: https://github.com/astorije/chai-immutable/issues/24. Лицо, которому удалось это решить, сделав все в дереве неизменным, но я думаю, что у меня уже есть все неизменное.

Мой код ниже:

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

export function addWino(state, wino) { 
    return state.updateIn(['winos'], arr => arr.push(wino)); 
} 

describe('setWinos',() => { 
describe('addWino',() => { 
    it('adds a Wino',() => { 

     const wino = Map({ 
     id: 5, 
     x:5, 
     y:5, 
     movable: false 
     }); 

     const nextState = addWino(state, wino); 
     expect(nextState).to.equal(Map({ 
     winos: List.of([ 
      Map({ 
      id: 1, 
      x:1, 
      y:1, 
      movable: false 
      }) 
     ], 
     [ 
      Map({ 
      id: 2, 
      x:2, 
      y:2, 
      movable: false 
      }) 
     ], 
     [ 
      Map({ 
      id: 5, 
      x:5, 
      y:5, 
      movable: false 
      }) 
     ]) 
     })); 

    }); 
    }); 
} 

я уже пробовал .eql() и .to.deep.equal(). Спасибо за помощь.

ответ

1

я нашел, почему, вместо того, чтобы:

winos: List.of([ 
     Map({ 
     id: 1, 
     x:1, 
     y:1, 
     movable: false 
     }) 
    ], 
    [ 
     Map({ 
     id: 5, 
     x:5, 
     y:5, 
     movable: false 
     }) 
    ]) 
    })); 

я должен иметь:

winos: List.of(
     Map({ 
     id: 1, 
     x:1, 
     y:1, 
     movable: false 
     }), 
     Map({ 
     id: 5, 
     x:5, 
     y:5, 
     movable: false 
     }) 
    ) 
    })); 

[], где не нужно и создание дополнительного списка.

+0

Вы должны отметить этот ответ как решение своего вопроса, так как это действительно было проблемой :) – astorije

0

Я думаю, что ваше утверждение неверно. assert.equal (и аналогичный) обычно проверяют, являются ли две вещи «одинаковыми». в случае объектов это недействительно, если это не совсем тот же объект. даже если контент один и тот же. Ищите что-то вроде "deepEqual" для рамок утверждения

посмотреть здесь: https://tonicdev.com/lipp/deep-equal

var assert = require('assert') 

var x = {a: 123} 
var y = x 
assert.equal(x, y) 

var u = {a: 123} 
assert.deepEqual(x, u, 'this is ok') 
assert.equal(x, u, 'this fails') 
+0

Я уже пробовал, но получаю тот же результат. Я добавил его на главный пост. В любом случае спасибо. – Flotos

+0

извините, это вам не помогло. – lipp