如何在mocha和mongoDB中使用chai使用节点发出post请求

时间:2018-01-24 05:18:32

标签: node.js mongodb mocha chai

  1. 如何在mocha和mongoDB中使用chai对节点发出POST请求。 我有一个包含我的get请求和post请求的测试文件。我下面的代码等于我的get请求,它通过我设置的1测试,但是我在创建我的帖子请求时遇到了麻烦,我不明白我应该做什么。 GET请求:

    const chai = require('chai');
    const expect = chai.expect;
    const chaiHttp = require('chai-http')
    
    chai.use(chaiHttp)
    
    describe('site', () => {       // Describe what you are testing
        it('Should have home page', (done) => { // Describe 
            // In this case we test that the home page loads
            chai.request('localhost:3000')
            chai.get('/')
            chai.end((err, res) => {
                if (err) {
                    done(err)
                }
                res.status.should.be.equal(200)
                done()   // Call done if the test completed successfully.
            })
        })
    })
    
    1. 到目前为止,这是我的发布/创建路线:

    2. 此请求的伪代码为:

    3. //现在有多少个帖子?
    4. //请求创建另一个
    5. //检查数据库中是否还有一个帖子
    6. //检查回复是否成功

    7. POST请求:

      const chai = require('chai')
      const chaiHttp = require('chai-http')
      const should = chai.should()
      chai.use(chaiHttp)
      const Post = require('../models/post');
      
      describe('Posts', function() {
          this.timeout(10000);
          let countr;
      
          it('should create with valid attributes at POST /posts', function(done) {
              // test code
              Post.find({}).then(function(error, posts) {
                  countr = posts.count;
      
                  let head = {
                      title: "post title", 
                      url: "https://www.google.com", 
                      summary: "post summary"
                  }
                  chai.request('localhost:3000')
                  chai.post('/posts').send(head)
                  chai.end(function(error, res) {
                      //console.log('success')
                  })
              }).catch(function(error) {
                  done(error)
              })
          });
      })
      
    8. 任何关于我做错事的指示都表示赞赏。我输出的错误是:

    9. 1)帖子        应该在POST /帖子上返回一个新帖子:      错误:超出10000毫秒的超时。对于异步测试和挂钩,请确保" done()"叫做;如果退回承诺,请确保它得到解决。

      npm ERR!代码ELIFECYCLE 错误的ERR!错误1 错误的ERR! reddit_clone@1.0.0 test:mocha

1 个答案:

答案 0 :(得分:0)

测试超时,因为请求永远不会发送。

基于docs我没有看到任何暗示您可以通过简单地将数据传递到chai .request('http://localhost:3000') .post('/posts') .send(head) .end((err, res) => { ... }); 函数来执行帖子的内容。这里需要对图书馆做出很多假设,例如:序列化类型,标题等。

使用JSON有效负载执行POST请求的正确方法是:

{{1}}