添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

I am writing tests and I do not know js well, but I need to find the answer quickly. In the courses, I have not reached this point yet, or maybe I just don’t understand. Please help me figure out what I'm doing wrong.

I have two questions:

  • The test starts working as soon as I delete the line:

    .then((response) => {
       authId = response.body.result.sessions[0].authId;
    

    if you do not delete this line, an error appears: TypeError: Cannot read property 'sessions' of undefined

  • How to write so that the fields are optional, that is, you can pass, or you can not pass
  • (props: { authId: string; deviceId: string })

    This is the response.body I am trying to parse:

    "result": { "sessions": [ "type": "web", "authId": "jRXtO7oNiBR5Ldeq", "platform": "platform", "application": "application", "seenAt": 1592052380 "integrations": [] "success": true

    My code:

    import { agent } from 'supertest';
    import { config } from '../../config';
    import { getSsoId } from '../../helpers/getUserFromGenesis';
    describe('First', () => {
        let id;
        let authId;
        beforeEach(async () => {
            id = await getId();
        const userAuthorizations = (fn: (response: any) => void) =>
            agent(config.baseUrl)
                .get(`users/${id}/authorizations?client_id=test`)
                .auth(config.user, config.pass)
                .expect((response) => {
                    fn(response);
        const deleteUserAuthorizations = (props: { authId: string; deviceId: string }) =>
            agent(config.baseUrl)
                .delete(`users/authorizations`)
                .auth(config.user, config.pass)
                .send(props)
                .expect((response) => {
                    expect(response.body.result.success).toEqual(true);
        const getSession = () =>
            agent(config.tokenQaUrl)
                .post(`/token`)
                .auth(config.user, config.pass)
                .send({
                    clientId: 'test',
                    userId: id,
                .expect((response) => {
                    expect(response.body.sessionId).not.toEqual('');
                    expect(response.body.sessionId).not.toEqual(null);
                .then((response) => {
                    authId = response.body.result.sessions[0].authId;
        it('test', async () => {
            await getSession().then(() =>
                userAuthorizations((response) => {
                    expect(response.body.result.sessions.length).toBeGreaterThan(0);
                    fields are optional means you have to make these field optional  props: { authId: string; deviceId: string }
    – Aditya toke
                    Jun 13, 2020 at 12:39
                    no they are not optional but if you want to make them optional then try adding ? in front of them for example props: { authId?: string; deviceId?: string }
    – Aditya toke
                    Jun 13, 2020 at 12:43
                    with respect to your first question first check what is present in the request.body before trying to access the session
    – Aditya toke
                    Jun 13, 2020 at 12:45
                    Yes, I apologize, did not add.  This is the response.body I am trying to parse: {   "result": {     "sessions": [       {         "type": "web",         "authId": "jRXtO7oNiBR5Ldeq_token_service",         "platform": "platform",         "application": "application",         "seenAt": 1592052380       }     ],     "integrations": []   },   "success": true }
    – ROMAN SKRIPNIKOV
                    Jun 13, 2020 at 12:50
    
  • It seems like some time your response is getting the JSON data in the way which you are trying to access, but some time its not. Its better to add conditions before trying to access data where the JSON is not of fixed structure.

  • To make these property optional just add ? it will make the properties option props: { authId?: string; deviceId?: string }

  • I am a bit unclear on your question. There are some good answers up top.

    In case you are trying to avoid a "property of undefined error" you can do something like this:

    authId = response?.body?.result?.sessions[0]?.authId;
    

    it prevents the error. Ideally you would type-check all of them.

    Thanks for contributing an answer to Stack Overflow!

    • Please be sure to answer the question. Provide details and share your research!

    But avoid

    • Asking for help, clarification, or responding to other answers.
    • Making statements based on opinion; back them up with references or personal experience.

    To learn more, see our tips on writing great answers.

  •