2017-05-28 2 views
2

Ich versuche, eine lokale Testumgebung für meine Firebase Cloud-Funktionen einzurichten. Allerdings habe ich Probleme, wenn ich versuche, einen Täuschungsversuch an einer meiner HTTP-Funktionen durchzuführen.Testen von Firebase HTTPS-Anruf mit CORS

Der Grund für meinen Fehler scheint zu sein, dass ich CORS (npm) verwende. Wenn ich cors entferne und die Funktion "test" unten mit nur einem response.status (200) starte, funktioniert alles. Aber beim Umbruch mit cors (req, res) scheitert mein Test mit TypeError: Kann Eigenschaft 'Herkunft' von undefined nicht lesen.

Was mache ich hier falsch?

In index.js ->

exports.test = functions.https.onRequest((request, response) => { 

cors(request, response,() => { 
    response.status(200); 
    response.send("test ok"); 
}) 

In meinem test.js

describe('Cloud Functions',() => { 
    // [START stubConfig] 
    var myFunctions, configStub, adminInitStub, functions, admin, cors; 

    before(() => { 
     // Since index.js makes calls to functions.config and admin.initializeApp at the top of the file, 
     // we need to stub both of these functions before requiring index.js. This is because the 
     // functions will be executed as a part of the require process. 
     // Here we stub admin.initializeApp to be a dummy function that doesn't do anything. 
     admin = require('firebase-admin'); 
     cors = require('cors')({ 
      origin: true 
     }); 
     adminInitStub = sinon.stub(admin, 'initializeApp'); 
     // Next we stub functions.config(). Normally config values are loaded from Cloud Runtime Config; 
     // here we'll just provide some fake values for firebase.databaseURL and firebase.storageBucket 
     // so that an error is not thrown during admin.initializeApp's parameter check 
     functions = require('firebase-functions'); 
     configStub = sinon.stub(functions, 'config').returns({ 
      firebase: { 
       databaseURL: 'https://not-a-project.firebaseio.com', 
       storageBucket: 'not-a-project.appspot.com', 
      } 
      // You can stub any other config values needed by your functions here, for example: 
      // foo: 'bar' 
     }); 
     // Now we can require index.js and save the exports inside a namespace called myFunctions. 
     // This includes our cloud functions, which can now be accessed at myFunctions.makeUppercase 
     // and myFunctions.addMessage 
     myFunctions = require('../index'); 
    }); 

    after(() => { 
     // Restoring our stubs to the original methods. 
     configStub.restore(); 
     adminInitStub.restore(); 
    }); 
    // [END stubConfig] 


     describe('test',() => { 
      it('should return status code 200', (done) => { 

       // [START invokeHTTPS] 
       // A fake request object, with req.query.text set to 'input' 
       const req = {}; 
       // A fake response object, with a stubbed redirect function which asserts that it is called 
       // with parameters 303, 'new_ref'. 
       const res = { 
        status: (status) => { 
         assert.equal(status, 200); 
         done(); 
        } 
       }; 

       // Invoke addMessage with our fake request and response objects. This will cause the 
       // assertions in the response object to be evaluated. 
       myFunctions.test(req, res); 
       // [END invokeHTTPS] 


      }) 
     }) 



}) 

Antwort

0

hinzufügen Header: {Herkunft: '*'}, auf Ihre Anfrage und setHeader() {} zur Antwort

const req = { 
 
    { origin: '*' } 
 
}; 
 

 
const res = { 
 
    status: (status) => { 
 
     assert.equal(status, 200); 
 
     done(); 
 
    } 
 
};

Hier 210
0

ist, wie ich um die cors Fehler bekam, mit sinon

const res = {}; 

Object.assign(res, { 
    status: sinon.stub().returns(res), 
    end: sinon.stub().returns(res), 
    json: sinon.stub().returns(res), 
    setHeader: sinon.stub(), 
    getHeader: sinon.stub(), 
}); 

beforeEach(() => { 
    Object.values(res).forEach(stub => stub.resetHistory()); 
}); 

Dann in Ihrem Test können Sie Ihre Antworten testen:

cloudFunctions.testFunction({ query: { text: 'foo' } }, res); 
    response = res.json.lastCall.args[0];