Qui c'è il mio model.py:
Qui la mia views.py:
Qui la mia form.py:
E qui il mio test.py:
Perchè mi dice ValueError: Cannot assign "<Mock id=...>": "List.owner" must be a user instance?
Sembra non riconosca self.request.user = Mock() come un User. Invece usando self.request.user = Mock(spec=User) mi da l'errore AttributeError: Mock object has no attribute '_state' ma eppure i mock non possono essere chiamati con qualsiasi attributo, ovvero con gli attributi della classe che gli viene passata?
Qualcuno sa spiegarmi il problema o più semplciemente come fare il test? Grazie

Python:
class List(models.Model):
owner = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True,
on_delete=models.PROTECT)
def get_absolute_url(self):
return reverse('view_list', args=[self.id])
@staticmethod
def create_new(first_item_text, owner=None):
list_ = List.objects.create(owner=owner)
Item.objects.create(text=first_item_text, list=list_)
class Item(models.Model):
text = models.TextField(default='')
list = models.ForeignKey(List, default=None, on_delete=models.PROTECT)
class Meta:
ordering = ('id',)
unique_together = ('list', 'text')
def __str__(self):
return self.text
Qui la mia views.py:
Python:
def new_list(request):
form = NewListForm(data=request.POST)
if form.is_valid():
list_ = List()
list_.owner = request.user
list_.save()
return redirect(str(list_))
return render(request, 'home.html', {'form': form})
Qui la mia form.py:
Python:
class NewListForm(ItemForm):
def save(self, owner):
if owner.is_authenticated:
List.create_new(first_item_text=self.cleaned_data['text'],
owner=owner)
else:
List.create_new(first_item_text=self.cleaned_data['text'])
E qui il mio test.py:
Python:
@patch('lists.views.NewListForm')
class NewListViewUnitTest(unittest.TestCase):
def setUp(self):
self.request = HttpRequest()
self.request.POST['text'] = 'new list item'
self.request.user = Mock()
#self.request.user = Mock(spec=User)
def test_passes_POST_data_to_NewListForm(self, mockNewListForm):
new_list(self.request)
mockNewListForm.assert_called_once_with(data=self.request.POST)
Perchè mi dice ValueError: Cannot assign "<Mock id=...>": "List.owner" must be a user instance?
Sembra non riconosca self.request.user = Mock() come un User. Invece usando self.request.user = Mock(spec=User) mi da l'errore AttributeError: Mock object has no attribute '_state' ma eppure i mock non possono essere chiamati con qualsiasi attributo, ovvero con gli attributi della classe che gli viene passata?
Qualcuno sa spiegarmi il problema o più semplciemente come fare il test? Grazie
