Почему супертест возвращает ошибку, когда все проходит?

Мой тест выглядит так:

it('should create a user with an email address and password', function(done) {
  return request.post('/v1/users').send(defaultUser).expect(200).expect(function(res) {
    console.log(res.body);
    res.body.should.have.property('id');
    res.body.should.have.property('name');
    res.body.should.have.property('email');
    res.body.should.have.property('username');
    return res.body.should.have.property('entities')["with"].lengthOf(1);
  }).end(done);
});

res.body похоже

{ id: 17,
  name: 'Satoshi Nakamoto',
  email: '[email protected]',
  username: 'snakamoto',
  api_key: '510e55d2c15b0617757bd463b3653ec8',
  entities: [ { id: 17, name: 'Satoshi Nakamoto Default Entity' } ] }

Так что у него есть все соответствующие поля. Ошибка, которую я получаю,

  1) User Interactions should create a user with an email address and password:
 Error: [object Object]
at Test.assert (/Users/shamoon/Sites/mysite/mysite-api/node_modules/supertest/lib/test.js:218:48)
at Server.assert (/Users/shamoon/Sites/mysite/mysite-api/node_modules/supertest/lib/test.js:132:12)
at Server.g (events.js:180:16)
at Server.emit (events.js:92:17)
at net.js:1276:10
at process._tickCallback (node.js:419:13)

Что я делаю не так?


person Shamoon    schedule 12.02.2015    source источник


Ответы (1)


Это проблема:

return res.body.should.have.property('entities')["with"].lengthOf(1);

Супертест обрабатывает ложное значение, возвращенное из вызова expect, который принимает функцию как означающую «все в порядке», а неложное значение означает «возникла проблема». То, что вы возвращаете, скорее всего, не является ложным. Большинство реализаций should возвращают объекты, допускающие цепочку флагов (например, foo.should.something(...).and.something(...).and...). Объекты не являются ложными, и поэтому expect считает, что тест не пройден.

person Louis    schedule 12.02.2015