Wondering what’s next for npm?Check out our public roadmap! »

    @anilanar/moxios
    TypeScript icon, indicating that this package has built-in type declarations

    0.9.0 • Public • Published

    Mock axios requests for testing

    About the fork

    The original repository was not maintained as often and had pending pull requests for a while. I'll try my best to merge this back into it, if the original author wishes so.

    Installing

    $ npm install @anilanar/moxios --save-dev

    Example

    import axios from 'axios'
    import moxios from '@anilanar/moxios'
    import sinon from 'sinon'
    import { equal } from 'assert'
     
    describe('mocking axios requests', function () {
     
      describe('across entire suite', function () {
     
        beforeEach(function () {
          // import and pass your custom axios instance to this method
          moxios.install()
        })
     
        afterEach(function () {
          // import and pass your custom axios instance to this method
          moxios.uninstall()
        })
     
        it('specify response for a specific request', function (done) {
          let input = document.querySelector('.UserList__Filter__Input')
          let button = document.querySelector('.UserList__Filter__Button')
     
          input.value = 'flintstone'
          button.click()
     
          // Elsewhere in your code axios.get('/users/search', { params: { q: 'flintstone' } }) is called
     
          moxios.wait(function () {
            let request = moxios.requests.mostRecent()
            request.respondWith({
              status: 200,
              response: [
                { id: 1, firstName: 'Fred', lastName: 'Flintstone' },
                { id: 2, firstName: 'Wilma', lastName: 'Flintstone' }
              ]
            }).then(function () {
              let list = document.querySelector('.UserList__Data')
              equal(list.rows.length, 2)
              equal(list.rows[0].cells[0].innerHTML, 'Fred')
              equal(list.rows[1].cells[0].innerHTML, 'Wilma')
              done()
            })
          })
        })
     
        it('stub response for any matching request URL', function (done) {
          // Match against an exact URL value
          moxios.stubRequest('/say/hello', {
            status: 200,
            responseText: 'hello'
          })
     
          // Alternatively URL can be a RegExp
          moxios.stubRequest(/say.*/, {/* ... */})
     
          let onFulfilled = sinon.spy()
          axios.get('/say/hello').then(onFulfilled)
     
          moxios.wait(function () {
            equal(onFulfilled.getCall(0).args[0].data, 'hello')
            done()
          })
        })
     
      })
     
      it('just for a single spec', function (done) {
        moxios.withMock(function () {
          let onFulfilled = sinon.spy()
          axios.get('/users/12345').then(onFulfilled)
     
          moxios.wait(function () {
            let request = moxios.requests.mostRecent()
            request.respondWith({
              status: 200,
              response: {
                id: 12345, firstName: 'Fred', lastName: 'Flintstone'
              }
            }).then(function () {
              equal(onFulfilled.called, true)
              done()
            })
          })
        })
      })
     
    })

    Mocking a axios.create() instance

    describe('some-thing', () => {
        let axiosInstance;
        beforeEach(() => {
          axiosInstance = axios.create();
          moxios.install(axiosInstance);
        });
        afterEach(() => {
          moxios.uninstall(axiosInstance);
        });
        it('should axios a thing', (done) => {
            moxios.stubRequest('http://www.somesite.com/awesome-url', {
              status: 200,
              responseText: reducedAsxResponse
            });
            axiosInstance.get('http://www.somesite.com/awesome-url')
                .then(res => assert(res.status === 200))
                .finally(done);
        });
    });
    

    Thanks

    moxios is heavily inspired by jasmine-ajax

    License

    MIT

    Install

    npm i @anilanar/moxios

    DownloadsWeekly Downloads

    42

    Version

    0.9.0

    License

    MIT

    Unpacked Size

    56.7 kB

    Total Files

    6

    Last publish

    Collaborators

    • avatar