最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - AssertionError: Target cannot be null or undefined - Stack Overflow

programmeradmin0浏览0评论

I am working on this testing suite that is frustrating me because I continue to get this error:

1) BlogPost API resource
       GET endpoint
         should return all existing posts:
     AssertionError: Target cannot be null or undefined.
      at D:\Projects\Thinkful\mongooseBlog02\blog-app-mongoose-challenge-solution\test\test-blog-integration.js:128:54
      at <anonymous>
      at process._tickCallback (internal/process/next_tick.js:188:7)

This is in reference to line 128 in my test-blog-integration.js file:

describe('GET endpoint', function() {

    it('should return all existing posts', function() {
      // strategy:
      //    1. get back all restaurants returned by by GET request to `/restaurants`
      //    2. prove res has right status, data type
      //    3. prove the number of restaurants we got back is equal to number
      //       in db.
      //
      // need to have access to mutate and access `res` across
      // `.then()` calls below, so declare it here so can modify in place
      let res;
      return chai.request(app)
        .get('/posts')
        .then(function(_res) {
          // so subsequent .then blocks can access response object
          res = _res;
          expect(res).to.have.status(200);
          console.log("testKC");
          // otherwise our db seeding didn't work
          expect(res.body.posts).to.have.lengthOf.at.least(1);
          return allPosts.count();
        })
        .then(function(count) {
          expect(res.body.posts).to.have.lengthOf(count);
        });
    });

I have tried posts, allPosts, but I continue to get the same error. I got allPosts from my models.js file:

'use strict';

const mongoose = require('mongoose');
mongoose.Promise = global.Promise;

const blogPostSchema = mongoose.Schema({
  author: {
    firstName: String,
    lastName: String
  },
  title: {type: String, required: true},
  content: {type: String},
  created: {type: Date, default: Date.now()}
});


blogPostSchema.virtual('authorName').get(function() {
  return `${this.author.firstName} ${this.author.lastName}`.trim();
});

blogPostSchema.methods.serialize = function() {
  return {
    id: this._id,
    author: this.author,
    content: this.content,
    title: this.title,
    created: this.created
  };
};

const BlogPost = mongoose.model('allPosts', blogPostSchema);

module.exports = { BlogPost };

I am working on this testing suite that is frustrating me because I continue to get this error:

1) BlogPost API resource
       GET endpoint
         should return all existing posts:
     AssertionError: Target cannot be null or undefined.
      at D:\Projects\Thinkful\mongooseBlog02\blog-app-mongoose-challenge-solution\test\test-blog-integration.js:128:54
      at <anonymous>
      at process._tickCallback (internal/process/next_tick.js:188:7)

This is in reference to line 128 in my test-blog-integration.js file:

describe('GET endpoint', function() {

    it('should return all existing posts', function() {
      // strategy:
      //    1. get back all restaurants returned by by GET request to `/restaurants`
      //    2. prove res has right status, data type
      //    3. prove the number of restaurants we got back is equal to number
      //       in db.
      //
      // need to have access to mutate and access `res` across
      // `.then()` calls below, so declare it here so can modify in place
      let res;
      return chai.request(app)
        .get('/posts')
        .then(function(_res) {
          // so subsequent .then blocks can access response object
          res = _res;
          expect(res).to.have.status(200);
          console.log("testKC");
          // otherwise our db seeding didn't work
          expect(res.body.posts).to.have.lengthOf.at.least(1);
          return allPosts.count();
        })
        .then(function(count) {
          expect(res.body.posts).to.have.lengthOf(count);
        });
    });

I have tried posts, allPosts, but I continue to get the same error. I got allPosts from my models.js file:

'use strict';

const mongoose = require('mongoose');
mongoose.Promise = global.Promise;

const blogPostSchema = mongoose.Schema({
  author: {
    firstName: String,
    lastName: String
  },
  title: {type: String, required: true},
  content: {type: String},
  created: {type: Date, default: Date.now()}
});


blogPostSchema.virtual('authorName').get(function() {
  return `${this.author.firstName} ${this.author.lastName}`.trim();
});

blogPostSchema.methods.serialize = function() {
  return {
    id: this._id,
    author: this.author,
    content: this.content,
    title: this.title,
    created: this.created
  };
};

const BlogPost = mongoose.model('allPosts', blogPostSchema);

module.exports = { BlogPost };
Share Improve this question asked Jul 17, 2018 at 1:45 user8359832user8359832
Add a ment  | 

1 Answer 1

Reset to default 8

It appears in one of your expect statements, the object you are expecting to have a length of XXX or such is undefined or null and does not have length attribute to pare to. Thus the assertion of expecting it for have a length of any value is failing.

发布评论

评论列表(0)

  1. 暂无评论