模拟测试中的远程HTTP响应

时间:2017-11-07 19:27:28

标签: javascript http testing mocking axios

我正在尝试编写一个测试,根据从API收到的响应来检查我的应用的行为。为此,我正在尝试对我所提出的请求做出响应,以获得我需要的配置。

一个示例是在登录后检查我的应用程序是否重定向到主页。我需要响应为HTTP 200并且具有API密钥的任何值。

我正在使用axios发出请求

目前我尝试了以下图书馆但没有成功

  • moxios
  • Axios公司-模拟适配器
  • 诺克

有没有人有模拟远程HTTP请求及其响应的经验?

编辑:如果有帮助,我使用Mocha和Chai进行测试

it('Does stuff', function () {
  moxios.stubRequest('/auth/get_api_key', {
    status: 200,
    responseText: 'hello'
  })
  return this.app.client.setValue('[name="username"]', 'testing').then(() => {
    return this.app.client.setValue('[name="password"]', 'testing').then(() => {
      return this.app.client.submitForm('#login-form').then(() => {
        return this.app.client.getRenderProcessLogs().then(function (logs) {
          console.log(logs)
        })
      })
    })
  })
})

上面的代码是我用来查看请求是否通过并输出此

的代码
  

[{level:'SEVERE',       消息:'http://127.0.0.1:8000/auth/get_api_key/ - 无法加载资源:net :: ERR_CONNECTION_REFUSED',       来源:'网络',       时间戳:1510082077495}]

1 个答案:

答案 0 :(得分:0)

我的例子主要来自moxios docs

首先在测试中导入所需的库。之后,您将在beforeEachafterEach挂钩中处理创建和销毁模拟axios服务器的问题。然后,您将sinon.spy()传递给axios'得到你想要监视的请求。

此获取请求将由moxios进行模拟,您可以通过moxios.wait(() => { moxios.request.mostRecent(); });访问它。在wait()方法中,您可以在最近的请求中设置所需的响应。

之后,就像您使用axios时一样,您将使用then()功能来获取您的回复。在then()内,您可以为该特定响应创建测试。完成规范后,请致电done();以关闭请求并移动规范。

import axios from 'axios';
import moxios from 'moxios';
import sinon from 'sinon'; 
import { equal } from 'assert';  //use the testing framework of your choice

beforeEach(() => {
  moxios.install();
});

afterEach(() => {
  moxios.uninstall();
});

it('Does stuff', (done) => {
  moxios.withMock(() => {
    let onFulfilled = sinon.spy();
    axios.get('/auth/get_api_key').then(onFulfilled);
    moxios.wait(() => {
      let request = moxios.requests.mostRecent();
      request.respondWith({
        status: 200,
        response: {
          apiKey: 1234567890
        }
      }).then((res) => {
        equal(onFulfilled.called, true);
        equal(res.status, 200);
        equal(res.response.apiKey, 1234567890);
        done();
      })
    })
  })
});