Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 带chai和supertest的摩卡咖啡:预期未定义为相等_Node.js_Unit Testing_Mocha.js_Chai_Supertest - Fatal编程技术网

Node.js 带chai和supertest的摩卡咖啡:预期未定义为相等

Node.js 带chai和supertest的摩卡咖啡:预期未定义为相等,node.js,unit-testing,mocha.js,chai,supertest,Node.js,Unit Testing,Mocha.js,Chai,Supertest,我编写了单元测试: var app = require('../server'); var chai = require('chai'); var supertest = require("supertest")(app); var GoogleUrl = require('google-url'); var config = require('../config'); var expect = chai.expect; describe('Urls Tests', function ()

我编写了单元测试:

var app = require('../server');
var chai = require('chai');
var supertest = require("supertest")(app);
var GoogleUrl = require('google-url');
var config = require('../config');

var expect = chai.expect;

describe('Urls Tests', function () {

  var url = {
    author : 'Alexey',
    description : 'grrggr',
    full_url : 'https://github.com',
    date : '30-06-2017',
    time : '18:21:27',
    count_click : 0,
    list_tags : [
      'Sport',
      'Football'
    ]
  };

  var token;

  beforeEach(function (done) {
    agent
      .post('http://localhost:8000/auth/login')
      .send({email: 'Keane95@yandex.ru', password: '123456'})
      .end(function (err, res) {
        if (err) {
          return done(err);
        }

        expect(res.body.userData).to.have.property('token');
        token = res.body.userData.token;
        done();
      });
  });

  it('should create a url', function(done) {

      var googleUrl = new GoogleUrl({
        'key': config.get('google_key')
      });

      googleUrl.shorten(url.full_url, function (err, shortUrl) {

        url.short_url = shortUrl;

        supertest
          .post('/urls/create')
          .send(url)
          .expect(401)
          .end(function (err, res) {
            if (err) return done(err);
            expect(res.body.author).to.equal('Alexey');
            url = res.body;
            done();
          });
      });

    });

  it('should modify a url by id', function(done) {
      url.description = 'Good description';
      url.list_tags.push('Liverpool');
      supertest
        .put('/urls/' + url._id)
        .send(url)
        .expect(401)
        .end(function(err, res) {
          if (err) return done(err);
          expect(res.body.description).to.equal('Good description');
          expect(res.body.list_tags[2]).to.equal('Liverpool');
          done();
        });
    });

  it('should modify a count of clicks', function(done) {
      url.count_click++;
      supertest
        .put('/urls/' + url._id)
        .send(url)
        .expect(401)
        .end(function(err, res) {
          if (err) return done(err);
          expect(res.body).to.equal('Count of the click is updated');
          done();
        });
    });

});
我运行以执行单元测试并获得错误:

我通过单元测试阅读文章。
第一篇文章:
第二条:

我不明白为什么我会犯这些错误。请帮帮我。我想我犯了点小错误,但因为我找不到

更新
我增加了路线:

var express = require('express');
var GoogleUrl = require('google-url');
var _ = require('lodash');
var token = require('../middlewares/token');
var Url = require('../models/url');
var config = require('../config');
var router = express();

router.post('/create', token.required, createShortUrl);
router.put('/count/:id', token.required, updateCountClick);
router.put('/:id', token.required, updateUrlById);

module.exports = router;

function createShortUrl(req, res) {

    _.trim(req.body.list_tags);
    var tags = _.split(req.body.list_tags, ',');
    tags.splice(tags.length - 1, 1);

    var date = returnDate();
    var time = returnTime();

    var googleUrl = new GoogleUrl({
        'key': config.get('google_key')
    });

    googleUrl.shorten(req.body.full_url, function (err, shortUrl) {

        if (err) {
            res.status(500).json(err);
        }

        var url = new Url({
            'author': req.payload.username,
            'description': req.body.description,
            'full_url': req.body.full_url,
            'short_url': shortUrl,
            'list_tags': tags,
            'date': date,
            'time': time
        });

        url.save(function (err, url) {

            if (err) {
                return res.status(500).json(err);
            } else {
                return res.status(200).json(url);
            }

        });

    });

}

function updateCountClick(req, res) {

    var count_click = req.body.count_click + 1;

    Url.findOneAndUpdate({_id: req.params.id}, {$set: {count_click: count_click}}, {new: true}, function (err, url) {

        if (err) {
            return res.status(500).json(err);
        }

        if (url) {
            return res.status(200).json('Count of the click is updated');
        }

    });
}

function updateUrlById(req, res) {

    _.trim(req.body.list_tags);
    var tags = _.split(req.body.list_tags, ',');
    tags.splice(tags.length - 1, 1);

    Url.findOneAndUpdate({_id: req.params.id}, {$set: {description: req.body.description, list_tags: tags}}, {new: true}, function (err, url) {

        if (err) {
            res.status(500).json(err);
        }

        if (url) {
            res.status(200).json(url);
        }

    });

}
更新2

增加了自生作用:

var token;

beforeEach(function (done) {
    agent
      .post('http://localhost:8000/auth/login')
      .send({email: 'Keane95@yandex.ru', password: '123456'})
      .end(function (err, res) {
        if (err) {
          return done(err);
        }

        expect(res.body.userData).to.have.property('token');
        token = res.body.userData.token;
        done();
      });
  }); 

此外,我还更新了我的单元测试代码。

我看不出您在代码中向哪里发送401
Url
。因此,您的测试请求似乎被带有401状态码(表示“未授权”)的
令牌.required
中间件拒绝

因此,基本上,您的测试从未命中实际代码

首先,您确实需要伪造授权才能使
令牌.required
中间件满意

然后期待200个结果

.send(url)
.expect(200) // normal execution flow of createShortUrl results in 200
.end(/* rest of your test logic */)

Post('/url/create')
handler发布您的代码401时它似乎没有发送数据。我理解您的意思,并在单元测试中更改了代码。我在其中添加了假授权,现在得到了另一个错误:
连接被拒绝
@AlexeyKorkoza如何将您的模型连接到数据库?您能从浏览器访问您的路线吗?无论如何,我想这应该是另一个问题。是的,差不多了。除了
/auth/login
/auth/signup
之外,我还可以访问所有路由。当我尝试使用routes
/auth/login
/auth/signup
访问时,我得到了404代码。如果我运行服务器,它将毫无问题地连接。我同意我必须提出另一个问题。
.send(url)
.expect(200) // normal execution flow of createShortUrl results in 200
.end(/* rest of your test logic */)