2016-04-13 5 views
1

I haben node/redux benutze ich folgendes haben, während sie mit chai Prüfung:unveränderliche Chai Assertion Fehler während erwartet equals führen

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 } ] }' 

I haben gesehen, daß dies ein bekannter Fehler ist: https://github.com/astorije/chai-immutable/issues/24. Die Person dort schaffte es, dies zu lösen, indem sie alles im Baum unveränderlich machte, aber ich denke, dass ich bereits alles unveränderlich habe.

Mein Code ist unten:

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 
      }) 
     ]) 
     })); 

    }); 
    }); 
} 

Ich habe auch schon versucht .eql() und .to.deep.equal(). Danke für Ihre Hilfe.

Antwort

1

ich gefunden habe, warum statt:

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

i haben sollte:

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

Die [] wurde nicht benötigt und erstellt eine zusätzliche Liste.

+0

Sie sollten diese Antwort als Lösung Ihrer Frage markieren, da dies in der Tat das Problem war :) – astorije

0

Ich denke, Ihre Behauptung vom falschen Typ ist. asser.equal (und ähnlich) teste normalerweise, ob zwei Dinge "gleich" sind. im Falle von Objekten gilt dies nicht, wenn es nicht genau das gleiche Objekt ist. auch wenn der Inhalt gleich ist. Suchen Sie nach etwas wie "deepEqual" für Ihre Behauptung Rahmen

siehe hier: 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

Ich habe es schon versucht, aber ich bekomme die gleiche Ausgabe. Ich habe es dem Hauptpost hinzugefügt. Trotzdem danke. – Flotos

+0

Entschuldigung, das hat dir nicht geholfen. – lipp