JS: заглушка метод для проведения модульного теста через testdouble

Я пытаюсь "заглушить" метод с помощью testdoubleJS, чтобы выполнить модульный тест для этого метода (делаю npm test). Я делаю это впервые, поэтому мне все еще трудно это понять. Для моей попытки - показанной ниже - я получаю ошибку TypeError: mediaAddImagePoint.run is not a function

Вот как выглядит мой метод, который я хочу протестировать:

import { ValidatedMethod } from 'meteor/mdg:validated-method'
import { LoggedInMixin } from 'meteor/tunifight:loggedin-mixin'
import { Media } from '/imports/api/media/collection.js'

const mediaAddImagePoint = new ValidatedMethod({
  name: 'media.point.add',
  mixins: [LoggedInMixin],
  checkLoggedInError: { error: 'notLogged' },
  validate: null,

  run ({ id, x, y }) {
    Media.update(
      { _id: id },
      {
        $push: {
          'meta.points': {
            id: Random.id(),
            x,
            y
          }
        }
      }
    )
  }
})

И вот как я пытаюсь проверить этот метод с помощью testdouble:

import { expect } from 'chai'
import td from 'testdouble'

describe('media.point.add', function () {
  describe('mediaAddImagePoint', function () {
    let Media = td.object(['update'])
    let ValidatedMethod = td.function()
    let LoggedInMixin = td.function()
    let mediaAddImagePoint

    beforeEach(function () {
      td.replace('meteor/mdg:validated-method', { ValidatedMethod })
      td.replace('meteor/tunifight:loggedin-mixin', { LoggedInMixin })
      td.replace('/imports/api/media/collection.js', { Media })
      mediaAddImagePoint = require('../../imports/api/media/methods/imagePoints.js').mediaAddImagePoint
    })

    afterEach(function () {
      td.reset()
    })

    it('should add image point', function () {
      const query = { id: 'sampleID', x: 12, y: 34 }
      mediaAddImagePoint.run(query)
      td.verify(Media.update(query))
    })
  })
})

0 ответов

Другие вопросы по тегам