ich ein Versprechen Funktion haben, die eine Authentifizierung auf den Clients CookieWie man richtig ein Versprechen Objekt Stummel, die Teil eines anderen Versprechen ist
const getInitialState = (id_token) => {
let initialState;
return new Promise((resolve,reject) => {
if(id_token == null){
initialState = {userDetails:{username: 'Anonymous',isAuthenticated: false}}
resolve(initialState)
}else{
var decoded = jwt.verify(JSON.parse(id_token),'rush2112')
db.one('SELECT * FROM account WHERE account_id = $1',decoded.account_id)
.then(function(result){
console.log('result is : ',result)
initialState = {userDetails:{username:result.username,isAuthenticated:true}}
resolve(initialState)
})
.catch(function(err){
console.log('There was something wrong with the token',e)
reject('There was an error parsing the token')
})
}
})
}
getInitialState ist ein Versprechen Objekt, das ruft eine Datenbankfunktion (ein anderes Versprechen basiert führt Objekt), wenn der Cookie gültig ist.
Ich möchte den db Anruf hier stumm zu einem Benutzernamen auflösen. Aber es funktioniert nicht, egal was ich versuche
Ich versuchte zwei Bibliotheken sinonStubPromise
und sinon-as-promised
. Aber beide scheinen in einem Timeout-Fehler zu führen, die mir sagt, dass die db
Funktion isnt
aufgelöst zu werden Ich glaube, ich bin nicht der db Funktion stubbing richtig
das sind die verschiedenen Möglichkeiten, wie ich versucht habe
stub2 = sinon.stub(db,'one')
stub2.returnsPromise().resolves({username:'Kannaj'})
oder
sinon.stub(db,'one').returns({username:'Kannaj'})
oder
sinon.stub(db,'one')
.withArgs('SELECT * FROM account WHERE account_id = $1',1)
.returns({username:'Kannnaj'})
oder
let db = sinon.stub(db).withArgs('SELECT * FROM account WHERE account_id = $1',1).returns({username:'Kannnaj'})
führen alle zu einem Timeout-Fehler von Mokka
Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.
diese Funktion meine gesamte Test ist
it('should return a valid user if id_token is valid',function(){
id_token = '{"account_id":1}'
console.log('stub1: ',stub1(), typeof(stub1))
console.log('stub2 : ',stub2,typeof(stub2))
// my attempts here
return expect(getInitialState(id_token)).to.eventually.be.true
})
Aus irgendeinem Grund glaube ich, Mokka/sinon ist den pg-promise-Kontext verlieren, sobald es db.any aufruft. nicht sicher warum.
Muss etwas mit der Stub-Sache sein, weil 'pg-promise' selbst 100% Testabdeckung ohne Probleme bietet. Hast du gesehen, wie es sich selbst testet? Vielleicht wird das helfen;) –