代码之家  ›  专栏  ›  技术社区  ›  Pavlo Zhukov

Stub action2 helper on testing action2控制器路由响应超级测试

  •  2
  • Pavlo Zhukov  · 技术社区  · 6 年前

    我有个项目 Sails.js 1

    西农

    操作2控制器代码

    module.exports = {
    
    
      friendlyName: 'Some action',
    
    
      description: '',
    
    
      inputs: {
        requiredParam: {
          example: 'some_value',
          required: true,
          type: 'string',
        }
      },
    
    
      exits: {
        someError: {
          description: 'Handles some error happens in controller',
          message: 'Some error handled in controller',
        }
      },
    
    
      fn: async function (inputs, exits) {
    
        const someProcesses = await sails.helpers.someHelper(inputs.requiredParam);
    
        if (someProcesses === 'someError') {
          exits.someError(someProcesses);
        } else {
          exits.success(someProcesses);
        }
    
      }
    
    
    };
    

    帮助程序代码

    module.exports = {
    
    
      friendlyName: 'Some helper',
    
    
      description: '',
    
    
      inputs: {
        requiredParam: {
          example: 'some_value',
          required: true,
          type: 'string',
        }
      },
    
    
      exits: {
        someError: {
          description: 'Just some error happens in workflow',
          message: 'Some error happens!',
        }
      },
    
    
      fn: async function (inputs, exits) {
    
        // All done.
        return inputs.requiredParam === 'isError' ? exits.success('someError') : exits.success('someProcessedValue');
    
      }
    
    
    };
    

    const request = require('supertest');
    const {createSandbox} = require('sinon');
    
    describe('GET /some-page/some-action', () => {
      before(() => {
        this.sandbox = createSandbox();
        this.sandbox.stub(sails.helpers, 'someHelper')
          .withArgs('some_value').returns('someProcessedValue')
          .withArgs('isError').returns('someError');
      });
    
      after(() => {
        this.sandbox.restore();
      });
    
      it('should response OK', async () => {
        await request(sails.hooks.http.app)
          .get('/some-page/some-action')
          .query({requiredParam: 'some_value'})
          .expect(200);
      });
    
      it('should response with error', async () => {
        await request(sails.hooks.http.app)
          .get('/some-page/some-action')
          .query({requiredParam: 'isError'})
          .expect(500);
      });
    });
    

    那我就继续读下去 the official doc helper page 我们应该使用 exits intercept 帆.js 1

    所以我重新编写了action2和helper的用法

    带有Action2拦截处理的Action2控制器

    module.exports = {
    
    
      friendlyName: 'Some action',
    
    
      description: '',
    
    
      inputs: {
        requiredParam: {
          example: 'some_value',
          required: true,
          type: 'string',
        }
      },
    
    
      exits: {
        someError: {
          description: 'Handles some error happens in controller',
          message: 'Some error handled in controller',
        }
      },
    
    
      fn: async function (inputs, exits) {
    
        const someProcesses = await sails.helpers.someHelper(inputs.requiredParam)
          .intercept('someError', exits.someError);// Error happens here
    
        return exits.success(someProcesses);
    
      }
    
    
    };
    

    出口触发辅助器

    我还没用链式机器的方法( tolerate , 拦截 所有测试都成功通过,但当我影响它时,我得到了一个错误。

    错误:发送500(“服务器错误”)响应: 类型错误:sails.helpers.someHelper(…).intercept不是函数

    我已经准备好了 a repo on GitHub 如果有人想试试看。

    回购标签

    1. 在不使用链式辅助方法的情况下更正测试结果
    2. 链式测试法 -失败的测试。

    Here is a related question 但这是为了 帆.js 0.12.14-

    0 回复  |  直到 6 年前
    推荐文章