Я делаю действительно простые полотна и проверяю их мокко.Я делаю это так же, как Юхо Вепсяляйнен, но моя выглядит немного проще.Я написал это в ec2015.
Класс CanvasMock:
import ContextMock from './ContextMock.js'
export default class {
constructor (width, height)
{
this.mock = [];
this.width = width;
this.height = height;
this.context = new ContextMock(this.mock);
}
getContext (string)
{
this.mock.push('[getContext ' + string + ']')
return this.context
}
}
Класс ContextMock:
export default class {
constructor(mock)
{
this.mock = mock
}
beginPath()
{
this.mock.push('[beginPath]')
}
moveTo(x, y)
{
this.mock.push('[moveTo ' + x + ', ' + y + ']')
}
lineTo(x, y)
{
this.mock.push('[lineTo ' + x + ', ' + y + ']')
}
stroke()
{
this.mock.push('[stroke]')
}
}
некоторые тесты mocha, которые оценивают функциональность самого макета:
describe('CanvasMock and ContextMock', ()=> {
it('should be able to return width and height', ()=> {
let canvas = new CanvasMock(500,600)
assert.equal(canvas.width, 500)
assert.equal(canvas.height, 600)
})
it('should be able to update mock for getContext', ()=> {
let canvas = new CanvasMock(500,600)
let ctx = canvas.getContext('2d')
assert.equal(canvas.mock, '[getContext 2d]')
})
})
Тест мокко, который оценивает функциональность функции, которая возвращает холст:
import Myfunction from 'MyFunction.js'
describe('MyFuntion', ()=> {
it('should be able to return correct canvas', ()=> {
let testCanvas = new CanvasMock(500,600)
let ctx = testCanvas.getContext('2d')
ctx.beginPath()
ctx.moveTo(0,0)
ctx.lineTo(8,8)
ctx.stroke()
assert.deepEqual(MyFunction(new CanvasMock(500,600), 8, 8), canvas.mock, [ '[getContext 2d]', '[beginPath]', '[moveTo 0, 0]', [lineTo 8, 8]', '[stroke]' ])
})
, поэтому в этом примере myfunction принимает холст, который вы передали в качестве аргумента (Myfunction (* 1015)* new CanvasMock (500 600) , 8, 8)) и записывает на нем строку от 0,0 до того, что вы передаете в качестве аргументов (Myfunction (new CanvasMock (500 600), ** 8, 8 **)), а затем возвращает отредактированный холст.
, поэтому, когда вы используете функцию в реальной жизни, вы можете передать фактический холст, а не макет холста, и тогда он будет запускать те же самые методы, но делать реальные вещи холста.
читайте о насмешках здесь