简体   繁体   中英

Mocha and Chai unit testing AssertionError

I don't understand why these are failing the variations I have tried are:

response.body.should.be.a('object').and.to.have.property('id');

and

response.body.should.have.property('id');

I get the error Uncaught AssertionError: expected { Object (starss) } to have property 'id'

here is my JSON payload from Postman


{
    "starss": {
        "id": 1,
        "name": "1",
        "discovery_name": "1",
        "imageFileName": "test1.jpg",
        "datediscovered": "2001-01-01T00:00:00.000Z",
        "colour": "1",
        "mass": "1.000",
        "dfe": "1.000",
        "galaxy_origin": "1",
        "star_categories_id": 1,
        "createdAt": "2021-12-03",
        "updatedAt": "2021-12-12"
    }
}

here are my Mocha tests

describe('GET/stars/:id',() => {
        it("it should get one star by ID", (done) =>
        {
            // Uncaught AssertionError: expected { Object (starss) } to be a starss
            // star GET by ID
            const starId = 1;
            chai.request(server)
                .get("/stars/" + starId )
                .end((err,response)=>{
                    response.should.have.status(200);
                    response.body.should.be.a('object');
                    response.body.should.be.a('object').and.to.have.property('id');
                    response.body.should.have.property('id');
                    // response.body.should.have.property('name');
                    // response.body.should.have.property('discovery_name');
                    // response.body.should.have.property('imageFileName');
                    // response.body.should.have.property('datediscovered');
                    // response.body.should.have.property('colour');
                    // response.body.should.have.property('mass');
                    // response.body.should.have.property('dfe');
                    // response.body.should.have.property('galaxy_origin');
                    // response.body.should.have.property('star_categories_id');
                    done();
                });

        });

The reason why it's not finding the id property is because the response body only has the key of starss. You need to go into the starss object to access its keys. I used to mocha/chai codepen to verify the result:

 mocha.setup('bdd'); var expect = chai.expect; describe('GET/stars/:id',function() { var body = { "starss": { "id": 1, "name": "1", "discovery_name": "1", "imageFileName": "test1.jpg", "datediscovered": "2001-01-01T00:00:00.000Z", "colour": "1", "mass": "1.000", "dfe": "1.000", "galaxy_origin": "1", "star_categories_id": 1, "createdAt": "2021-12-03", "updatedAt": "2021-12-12" } } it("body to be object", function() { expect(body).to.be.a('object'); }) it("it should get one star by ID", function() { console.log(body) expect(body.starss).to.contain.key('id'); // response.body.should.have.property('"id"'); }) }); mocha.run();

The URL for the codepen is here: https://codepen.io/alexpyzhianov/pen/KVbeyO

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM