当我在功能测试中使用硒进行渲染时,我得到了不同的模板结果。通常访问页面,我看到对象被渲染。在功能测试期间,页面是空白的(它甚至不会在空子句中显示文本)。我编写了一个小型的Django应用程序来测试它,并确保我不会发疯,并且我得到了相同的问题一贯。Django模板中的反向关系呈现零星
该机型:
class M(models.Model):
pass
class N(models.Model):
m = models.ForeignKey(
M,
null=True,
default=None,
)
的视图:
def view_my_problem(request):
ms = M.objects.all()
context = {'ms': ms}
return render(request, 'my_problem_template.html', context)
模板:
<html>
{% for m in ms %}
{% for n in m.n_set.all %}
{{ n }}
{% empty %}
THIS IS EMPTY
{% endfor %}
{% endfor %}
</html>
并且测试的一个问题(失败“的AssertionError:'N对象不在''“中找到):
class FunctionalTest(StaticLiveServerTestCase):
@classmethod
def setUpClass(cls):
for arg in sys.argv:
if 'liveserver' in arg:
cls.server_url = 'http://' + arg.split('=')[1]
return
super().setUpClass()
cls.server_url = cls.live_server_url
@classmethod
def tearDownClass(cls):
if cls.server_url == cls.live_server_url:
super().tearDownClass()
def setUp(self):
self.browser = webdriver.Firefox()
self.browser.implicitly_wait(10)
def tearDown(self):
self.browser.close()
def test_my_problem(self):
m = M()
m.save()
n = N(m=m)
n.save()
self.assertEqual(N.objects.count(), 1)
self.assertEqual(M.objects.count(), 1)
self.assertEqual(m.n_set.count(), 1)
text = self.browser.find_element_by_tag_name('html').text
self.assertIn('N object', text)
但在测试中手动渲染模板可以正常工作。和正常访问页面(不是在运行测试时)一样正常工作。我可以在视图中提前编写值,然后遍历常量,但我很好奇为什么这不起作用。这里发生了什么?
但是当你做测试时它会呈现什么? –
@ShangWang上面,我说它失败了,在''“中找不到”AssertionError:'N object'。所以它呈现一个空白字符串。 (它期望找到'N对象',但是会找到'')。(编辑:正如Vladmir在下面指出的那样,我错过了实际获取url的方式。所以,我无法重现我的软件在这个例子中遇到的问题。故障。) – Terrence