我已经进行了以下测试:
class FirefoxTestCases(StaticLiveServerTestCase):
def setUp(self):
user = User.objects.create(
first_name="user",
last_name="one",
username="userone",
is_active=True,
)
user.set_password("test")
user.save()
self.client = webdriver.Firefox()
def tearDown(self):
self.client.quit()
def test_log_in_displays_firefox(self):
# Opening the link we want to test
self.client.get(self.live_server_url)
assert "log in" in self.client.page_source
self.client.find_element_by_id("id_username").send_keys("userone")
self.client.find_element_by_id("id_password").send_keys("test")
self.client.find_element_by_id("log_in").click()
time.sleep(2)
# Check the returned result
assert "appone" in self.client.page_source
该应用程序立即带您进入登录页面,并进入log_in
视图
def log_in(request):
if request.user.is_authenticated:
return redirect("launcher")
if request.method == "POST":
form = LoginForm(request.POST)
if form.is_valid():
user = authenticate(
request,
username=request.POST.get("username"),
password=request.POST.get("password"),
)
if user is not None:
login(request, user)
# 500 error occurs here
return redirect("launcher")
return render(request, "launcher/login.html", {"form": form})
else:
form = LoginForm()
return render(request, "launcher/login.html", {"form": form})
该表单提交没有问题,但是在日志中给出了500个错误。它将再次重定向到登录页面(预期)。
我还有另一项测试,可以以编程方式登录有效的同一用户:
class TestViews(TestCase):
def setUp(self):
user = User.objects.create(
first_name="user",
last_name="two",
username="usertwo",
is_active=True,
)
user.set_password("test")
user.save()
def test_logged_in_one_app_returns_200_and_launcher(self):
"""
A user with one app sees the launcher.html page
"""
user = User.objects.get(username="usertwo")
user.set_password("test")
user.save()
test_client = Client()
test_client.login(username="usertwo", password="test")
response = test_client.get("/", follow=True)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, "launcher/launcher.html")
该测试通过并按预期工作。
考虑到用户确实存在并且我设置了密码,我无法弄清楚为什么我用硒测试时得到了500 ...我不确定是怎么回事。
如果我在本地启动它-我可以以用户身份登录而不会出现问题,并且一切正常。但是只有在测试时,用户登录才会失败。
答案 0 :(得分:0)
显然在这里有重定向:
if user is not None:
login(request, user)
# 500 error occurs here
return redirect("launcher")
这个问题最终导致了问题(尽管我不确定为什么)。
我用这个替换了该部分:
if user is not None:
login(request, user)
if not request.user.groups.all():
return render(request, "launcher/no_apps.html")
return render(
request,
"launcher/launcher.html",
{
"apps": App.objects.filter(
groups__in=request.user.groups.all()
).distinct()
},
)
曾工作过。
我不确定为什么没有重定向-但是将其呈现在此处既可以在测试环境中也可以在测试环境中使用。