2013-10-17 3 views
3

나는이 사이트와 웹을 잠시 동안 검색해 왔으며이 문제에 대한 해결책을 찾을 수 없습니다. 내 API의 REST 기능을 테스트하려고하지만 PUT 테스트가 작동하지 않는 것 같습니다. 테스트가 모카에서 실행될 때마다 "잡히지 않은 어설 션 오류 : expected [] to equal {objectData}"오류가 발생합니다. 여기서 objectData는 내가 게시하려고하는 객체의 json 표현 (couponTwo라는 이름)입니다.Mocha에서 Supertest를 사용하여 Node.js Express API 및 MongoDB를 테스트하십시오.

beforeEach 함수에 문제가 있다는 느낌이 있습니다. 각 테스트 전에 데이터베이스가 지워지므로 다른 많은 테스트가 올바르게 실행되어야합니다. 이 질문에 대한 대답은 분명하고 경우

describe('#post', function() { 
it('should return a coupon object after post', function (done) { 
request(url).post('/coupons') 
    .set('Content-Type', 'application/json') 
    .send(couponTwo) 

    request(url).get('/coupons').end(function (err, res) { 
    if (err) throw err; 
    console.log(res.body); 
    res.body.should.eql(couponTwo); 
    done(); 
    }) 
}) 
}) 

내가 사과 : 여기

var config = require('../config/config'); 
var mongoose = require('mongoose'); 
var should = require('should'); 
var request = require('supertest'); 
var Coupon = require('../models/coupon'); 
var url = require('../config/config').test.url; 

process.env.NODE_ENV = 'test'; 

beforeEach(function (done) { 

    function clearCollections() { 
    for (var collection in mongoose.connection.collections) { 
     mongoose.connection.collections[collection].remove(function() {}); 
    } 
    return done(); 
    } 

    if (mongoose.connection.readyState === 0) { 
    mongoose.connect(config.test.db, function (err) { 
     if (err) throw err; 
     return clearCollections(); 
    }); 
    } else { 
    return clearCollections(); 
    } 
}); 

afterEach(function (done) { 
    mongoose.disconnect(); 
    return done(); 
}); 

객체가 PUT 후 데이터베이스에 있는지 테스트하기 위해 예상되는이된다 다음은 테스트 코드입니다 나는 근본적인 무언가를 놓치고 있지만, 나는 한계에 도달했다. 당신의 도움을 주셔서 감사합니다!

답변

0

요청 호출의 비동기 성 때문이라고 생각합니다. 두 번째 요청을 콜백으로 래핑해야하므로 첫 번째 요청이 완료되고 테스트 객체가 데이터베이스에 저장 될 때만 실행됩니다.

.eql(couponTwo) 귀하의 응답은 배치 된 객체를 포함하는 배열이기 때문에 귀하의 경우에는 실패하고 직접 객체와 비교하게됩니다. 그것이 배열의 유일한 요소인지 확인하려면 .eql([couponTwo])을 사용하거나 .containEql(couponTwo)을 사용하십시오.

이 시도 :

request(url).post('/coupons') 
.set('Content-Type', 'application/json') 
.send(couponTwo) 
.end(function() { 
    request(url).get('/coupons').end(function (err, res) { 
    if (err) throw err; 
    console.log(res.body); 
    res.body.should.containEql(couponTwo); 
    done(); 
    }); 
}); 
관련 문제