Chai / Mocha不可变测试一直都失败了

时间:2016-06-06 03:24:51

标签: javascript reactjs mocha chai immutable.js

我正在完成教程here并发现除了第一个最基本的chai测试之外几乎所有测试都失败了。以下是失败测试的当前示例

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

import {setEntries} from '../src/core';

describe('application logic', () => {
    describe('setEntries', () => {
        it('adds the entries to the state', () => {
            const state = Map();
            const entries = List.of('Trainspotting', '28 Days Later');
            const nextState = setEntries(state, entries);
            expect(nextState).to.equal(Map({
                entries: List.of('Trainspotting', '28 Days Later')
            }));
        });
    });
});

以下是代码测试:

import {List} from 'immutable';

export function setEntries(state, entries){
    return state.set('entries', entries);
}

这是失败的错误消息:

1) application logic setEntries adds the entries to the state:

      AssertionError: expected { Object (size, _root, ...) } to equal { Object (size, _root, ...) }
      + expected - actual

                 "size": 2
               }
             ]
           ]
      -    "ownerID": [undefined]
      +    "ownerID": {}
         }
         "size": 1
       }

我似乎无法找到有关此错误含义的任何有意义的文档,也没有看到本教程的任何其他用户提及类似问题。知道这在哪里窒息吗?

2 个答案:

答案 0 :(得分:2)

您不能对Immutable对象使用常规的相等性检查。相反,请使用Immutable.is()

之类的内容
import Immutable, {List, Map} from 'immutable';

...

expect(
  Immutable.is(nextState, Map({
    entries: List.of('Trainspotting', '28 Days Later')
  }))
).to.be.true;

甚至更好,请使用chai-immutable

import chai, {expect} from 'chai';
import chaiImmutable  from 'chai-immutable';

chai.use(chaiImmutable);

使用后者,您的测试用例可以保持不变。

答案 1 :(得分:0)

您必须在文件的开头添加以下代码。

 import chai from 'chai';
 import chaiImmutable from 'chai-immutable';

 chai.use(chaiImmutable);