我正在和Django一起写这本关于TDD的书。我得到了与使用self.client.get('/')不同的行为和使用self.browser.get('/localhost:8000')的不同行为,看起来它们看起来是一样的,但行为不同。
class FirstTest(unittest.TestCase):
def setUp(self):
self.browser = webdriver.Chrome(os.path.join(os.getcwd(), 'chromedriver'))
def test_home_page_returns_correct_html(self):
response = self.client.get('/')
self.assertTemplateUsed(response, 'home.html')有人能解释一下这里发生了什么吗?
发布于 2019-08-09 08:21:42
这是两件不同的事情。
self.client,是内置的Django测试客户端.这不是真正的浏览器,甚至不发出真正的请求。它只构造一个Django HttpRequest对象,并通过请求/响应过程(中间件、URL解析器、视图、模板)传递它,并返回Django生成的任何内容。它根本不会解析或呈现响应,也不会发出由HTML驱动的其他资产请求等等。
但webdriver.Chrome实际上是一个真正的浏览器( Chrome )。Webdriver启动一个无头版本的Chrome,并驱动它请求您的网页。它们通过实际的HTTP请求,然后在浏览器中呈现响应;就像真正的浏览器一样,如果HTML包含指向JS或CSS的链接,它将请求它们,然后也呈现它们。
https://stackoverflow.com/questions/57425954
复制相似问题