Кто-нибудь знает, как написать фиктивные тесты для объектов Odoo?
У меня есть следующие классы и методы:
my_module
from odoo import models
class MyModel(models.Model):
_name = 'my.model'
def action_copy(self):
IrTranslation = self.env['ir.translation']
for rec in self:
if rec.translate:
IrTranslation.force_translation(rec)
my_module_2 :
from odoo import models
class IrTranslation(models.Model):
_inherit = 'ir.translation'
def force_translation(self, rec):
# do stuff
Когда я вызываю его, я хочу проверить, был ли IrTranslation.force_translation
вызван в методе action_copy
и сколько раз.
Но этот метод не импортируется напрямую, на него ссылаются через env
.
Если, скажем, force_translation
будет импортировано как:
from my_module_2.IrTranslation import force_translation
def action_copy(self):
# do stuff.
force_translation()
Тогда я мог бы попытаться сделать что-то вроде этого:
from unittest import mock
from my_module import action_copy
def test_some_1(self):
with mock.patch('my_module.my_module_2.IrTranslation') as mocked_translation:
action_copy()
mocked_translation.force_translation.assert_called_once()
Но так как модули в Odoo не импортируются напрямую (как вы делаете это в простом Python), я не понимаю, как указывать методы в среде Odoo для имитации.
P.S. Я также не видел никаких поддельных тестов в стандартном Odoo, за исключением базовых классов, которые не наследуют Model
class ->, которые затем нужно использовать его атрибут _inherit
вместо импорта класса и передачи его для наследования другому классу. .