7

I'm new to mocha and should.js. I'm trying to check the response's status but it gives me TypeError: Object #<Assertion> has no method 'status' The code is like this:

describe('Local signup', function() {
    it('should return error trying to save duplicate username', function(done) {
      var profile = {
        email: 'abcd@abcd.com',
        password: 'Testing1234',
        confirmPassword: 'Testing1234',
        firstName: 'Abc',
        lastName: 'Defg'
      };
      request(url)
          .post('/user/signup')
          .send(profile)
          .end(function(err, res) {
            if (err) {
              throw err;
            }
            res.should.have.status(400);
            done();
          });
    });

I also noticed that although I have declared var should = require('should'); , my ide notifies me that 'should' is a unused local variable. I don't really know why.

Charlie
  • 81
  • 1
  • 7
  • Are you running this in a browser? – plalx Jan 06 '15 at 02:02
  • @plalx Tagged with `node.js`. – Yury Tarabanko Jan 06 '15 at 02:05
  • @YuryTarabanko I know, but it says in the docs that `status` is not part of the browser build, so I got suspicious. – plalx Jan 06 '15 at 02:05
  • @plalx I run the test in terminal – Charlie Jan 06 '15 at 02:11
  • `res.should.have.status()` is something which is available **only with some implementation of the `should` idiom**. In other words, the error may happen because the package used to provide `should` does not implement `status`, or because the package has not been correctly initialized, or for some other reason. Nothing in this question indicates what package provides `should`. – Louis Jan 06 '15 at 11:55

4 Answers4

16

Try

res.status.should.be.equal(400);

or

 res.should.have.property('status', 400);

And about " 'should' is a unused local variable". It's true. You don't use should directly. Only sideeffects. Try require('should'); instead.

Yury Tarabanko
  • 44,270
  • 9
  • 84
  • 98
3

Place the line:

require('should-http');

somewhere in your code. E.g.:

require('should-http');

describe('Test Something', function() {
    ...
Jason
  • 2,271
  • 2
  • 24
  • 23
2

As an addition to Yury answer. There is should-http package, which contain .status(code) assertion. You need to require somewhere it in code and it will be added to should.js.

den bardadym
  • 2,747
  • 3
  • 25
  • 27
1

I would switch to expect:

expect(res.status).to.be.eq(400);
LexH
  • 1,047
  • 9
  • 21