Трудно понять, где остановиться на тестировании, что вы должны тестировать и как.
В общем, когда мне приходится иметь дело с взаимодействием с чем-то, что я считаю внешним по отношению к тому, что я разрабатываю, библиотекой, сетевым сервисом, вызовом ajax, внешним сервером, канвой в вашем случае, я начну думать о том, как макет ит.
Я не очень знаком с холстом. Я бы сделал это одним из следующих способов:
1) Если вы хотите убедиться, что ваш код что-то делает с холстом, просто использовать шпионов прямо на нем. Шпионы - очень мощные инструменты, узнайте о них и используйте их. Например, если вы хотите убедиться, что путь к холсту обновлен, вы можете сделать
var spy = spyOn(canvas, 'moveTo').andCallFake(function (x, y) {
expect(x).toEqual(10.0);
expect(y).toEqual(20.0);
});
//Do something through your api that would call canvas.moveTo
...
expect(spy).toHaveBeenCalled();
Конечно, вы могли бы шпионить за любым другим методом canvas.
2) Если вам нужны тесты, которые выполняют много взаимодействий, и / или вы снова и снова пишете одних и тех же шпионов для разных тестов, возможно, вам лучше использовать фиктивный объект. Будьте осторожны: не переписывайте библиотеку, над которой вы издеваетесь! Сохраняйте это простым и высмеивайте только то, что вам нужно, добавляя по ходу дела. Кроме того, взгляните на доступные насмешливые библиотеки, которые могут помочь вам или дать вам идеи. Многие жасмины используют sinon . Лично я придерживаюсь голого жасмина и полагаюсь на свои собственные издевательства, когда они мне нужны.
Правильно, так что позвольте мне попытаться придумать что-нибудь;) Для холста я бы ожидал, что объект-насмешник скажет необходимые вам методы, beginPath
, moveTo
, stroke
, что угодно ... Вы можете сделать так, чтобы вместо рисования на холсте они добавляли точки в массив, представляющий ваш путь. Тогда ваш тест станет набором взаимодействий с вашим кодом, и в конце вы сможете получить путь от макета и дать ожидаемые результаты.