2017-12-22 5 views
0

, 나는 내 test.js에서유닛 테스트 중포 기지의 기능은 다음과 같이 방법) (중포 기지-관리자 SDK를하는 index.js에서

exports.write = functions.https.onRequest((req, res) => { 
    admin.database() 
     .ref(`xxx/yyy`) 
     .push() 
     .set({timestamp: admin.database.ServerValue.TIMESTAMP}); 
    res.status(200).end(); 
}); 

다음, 나는 스텁 admin.database를 스텁 :

const refStub = sinon.stub(); 
setStub = sinon.stub(); 
refStub.withArgs('xxx/yyy').returns({push:() => ({key: 'fakeKey', set: setStub})}); 
databaseStub = sinon.stub(admin, 'database').get(() => { 
    return() => { 
     return {ref: refStub}; 
    }; 
    }); 

테스트를 실행하면 TypeError: Cannot read property 'TIMESTAMP' of undefined 오류가 발생합니다. 이 오류를 수정하거나 admin.database.ServerValue.TIMESTAMP으로 전화를 걸려면 어떻게해야합니까? 감사.

답변

0

JavaScript에서 함수는 속성을 가질 수 있습니다. 그 지식으로

> function x() {} 
undefined 
> x 
[Function: x] 
> x.prop = 1 
1 
> x 
{ [Function: x] prop: 1 } 
> 

는 admin.database 스텁은 신용이 ​​중포 기지 여유 채널에 나에게 그것을 지적 Doug Stevenson로 이동 간단

var databaseStub = sinon.stub(admin, 'database').returns({ref: refStub}); 
//monkey patch database()'s property 
admin.database.ServerValue = {TIMESTAMP: '1111'}; 

같습니다. 덕 덕분에!

0

admin.database.ServerValue.TIMESTAMP은 전화하지 않습니다. 값이 변하지 않는 객체입니다. 서버 측에서 데이터베이스가 해석하는 특별한 값입니다. 당신이 그것을 인쇄 할 경우는 다음과 같습니다

{ '.sv': 'timestamp' } 

은 절대 변경 상수 값은 본질적입니다 때문에, 조롱 할 필요가 없습니다.

또한 올바르게 사용하고 있는지 확실하지 않습니다. Realtime Database에 쓰는 객체의 값으로 지정해야합니다.

+0

안녕하세요 덕, 응답 해 주셔서 감사합니다. 내가 더 명확하게하기 위해 내 게시물을 편집했습니다. 너는 다시 생각해 볼까? 감사. – user3240644

관련 문제