#node.js #testing #mocha.js #chai
#node.js #тестирование #mocha.js #chai
Вопрос:
Я хочу провести тест с помощью Chai. Я хочу проверить детали видео. Но я получаю сообщение об ошибке. Где я ошибаюсь?
movieTest.js страница
const chai = require('chai');
const chaiHttp = require('chai-http');
const should = chai.should();
const expect = require('chai').expect
const server = require('../../app');
chai.use(chaiHttp);
let token, movieId;
// Movies Testing
// Authenticate Test
describe('/api/movies tests', () => {
before((done) => {
console.log('İlk Önce Token Kontrol Yapılıyor');
chai.request(server)
.post('/authenticate')
.send({ username: 'mms', password: '123' })
.end((err, res) => {
token = res.body.token;
console.log('Kullanıcı Token:', token);
done();
});
});
describe('/GET/:movie_id movie', () => {
it('it should GET a movie by the given id', (done) => {
chai.request(server)
.get('/api/movies/' movieId)
.set('x-access-token', token)
.end((err, res) => {
res.should.have.status(200);
console.log(res.body, movieId);
res.body.should.be.a('object');
res.body.should.have.property('title');
res.body.should.have.property('director_id');
res.body.should.have.property('category');
res.body.should.have.property('country');
res.body.should.have.property('year');
res.body.should.have.property('imdb');
res.body.should.have.property('_id').eql(movieId);
done();
});
});
});
});
консоль
/GET/:movie_id movie
{ username: 'mms', iat: 1602422017, exp: 1602432016 }
GET /api/movies/undefined 200 2.532 ms - 94
{
stringValue: '"undefined"',
kind: 'ObjectId',
value: 'undefined',
path: '_id',
reason: {}
} undefined
1) it should GET a movie by the given id
3 passing (2s)
1 failing
1) /api/movies tests
/GET/:movie_id movie
it should GET a movie by the given id:
Uncaught AssertionError: expected { Object (stringValue, kind, ...) } to have property 'title'
at /Users/Macit/Desktop/CALISMALAR/ISLER/WEB/JS-NODEJS/MovieApi/test/api/movieTest.js:89:42
at Test.Request.callback (node_modules/superagent/lib/node/index.js:716:12)
at /Users/Macit/Desktop/CALISMALAR/ISLER/WEB/JS-NODEJS/MovieApi/node_modules/superagent/lib/node/index.js:916:18
at IncomingMessage.<anonymous> (node_modules/superagent/lib/node/parsers/json.js:19:7)
at endReadableNT (_stream_readable.js:1184:12)
at processTicksAndRejections (internal/process/task_queues.js:80:21)
npm ERR! Test failed. See above for more details.
Редактировать
movie.js
const express = require('express');
const router = express.Router();
//Models
const Movie = require('../models/Movie');
/* POST movie listing. */
router.post('/', (req, res, next) => {
//res.send('içerik buraya geliyor');
const { title, imdb, category, country, year } = req.body;
const movie = new Movie(req.body);
const promise = movie.save();
//burada tüm datayı ekrana basıyoruz.
promise.then((data) => {
res.json({data, status : 'Yeni film başarılı bir şekilde eklendi', code: 'AD001'});
//hataları yakalıyoruz
}).catch((err) => {
res.json({err, status : 'Hoops! Bir hata meydana geldi', code : 'ERR001'});
});
});
//Top 3 list
router.get('/top3', (req, res) => {
// datayı bul ve ekrana bas
const promise = Movie.find({ }).limit(3).sort({ imdb: -1 });
promise.then((data) => {
res.json(data);
//hatayı yakala
}).catch((err) => {
res.json(err);
})
});
// Tüm data listesini geçtiğimiz kısım
router.get('/', (req, res) => {
const promise = Movie.aggregate([
{
$lookup: {
from:'directors',
localField:'director_id',
foreignField:'_id',
as:'director'
}
},
{
$unwind:'$director'
}
]);
promise.then((data) => {
res.json(data);
//hatayı yakala
}).catch((err) => {
res.json(err);
})
});
router.get('/:movie_id', (req, res, next) => {
const promise = Movie.findById(req.params.movie_id);
promise.then((movie) => {
if (!movie)
next({ message: 'The movie was not found', code: 'FND001' });
res.json(movie);
}).catch((err) => {
res.json(err);
})
});
router.put('/:movie_id', (req, res, next) => {
const promise = Movie.findOneAndUpdate(
req.params.movie_id,
req.body,
{
new: true
}
);
promise.then((movie) => {
if (!movie)
next({ message: 'Movie files was not update', code:' UP001' });
res.json({movie, status : 'Başarılı şekilde güncellendi'});
}).catch((err) => {
res.json(err);
})
});
// data silme işlemi
router.delete('/:movie_id', (req, res, next) => {
const promise = Movie.findByIdAndRemove(req.params.movie_id);
promise.then((movie) => {
if (!movie)
next({ message: 'Data not found', code: 'NT001' });
res.json({movie, status: 'Başarılı bir şekilde silindi', code: 'DL001'});
}).catch((err) => {
res.json(err);
})
});
// Between
router.get('/between/:start_year/:end_year', (req, res) => {
const { start_year, end_year } = req.params;
// datayı bul ve ekrana bas
const promise = Movie.find(
{
year: { "$gte": parseInt(start_year), "$lte": parseInt(end_year) }
}
);
promise.then((data) => {
res.json(data);
//hatayı yakala
}).catch((err) => {
res.json(err);
})
});
module.exports = router;
Согласно последним тестам, у меня проблема с MovieID . Но я не смог найти проблему. Мне нужна ваша поддержка в этом отношении.
Мои другие тесты прошли успешно. Но я не смог сделать этот тест успешным.
Комментарии:
1. @robertklep помогите, пожалуйста
2. Судя по всему, это правильный сбой, основанный на ваших тестах. Независимо от того, какой API вы вызываете, запрашивается в
undefined
качестве строкового значения дляmovieId
3. Привет, @AndrewNolan обновите вопрос, добавьте мой movie.js досье. Помогите, пожалуйста
4. @MMsari где вы определили MovieID для этой строки
.get('/api/movies/' movieId)
? Запрос к серверу показывает undefinedGET /api/movies/undefined 200 2.532 ms - 94