jquery 前端集成测试

t2a7ltrp  于 2024-01-07  发布在  jQuery
关注(0)|答案(4)|浏览(170)

我正在考虑做一些前端集成测试,但在这方面有点卡壳。我知道如何做JavaScript单元测试,但我真的没有得到前端测试的想法。
我想测试一些场景:

  • 页面加载后,我可以检查是否有特定的div填充了内容吗
  • 点击一个按钮后,弹出窗口应该会出现,这是可能的测试
  • 一个div是否应用了特定的HTML?

最好的工具是什么?我该怎么做?

uemypmqf

uemypmqf1#

我也会推荐e2e测试来检查你的网站,特别是你的JavaScript是否像你期望的那样运行。有很多库可以用来在Javascript中进行Webdriver测试。看看这个stackoverflow线程:Headless Browser and scraping - solutions
例如,在WebdriverJS中,您可以轻松地链接几个命令以在浏览器中导航并获取测试信息。其中一个场景可能看起来像这样(使用Mocha):

  1. describe("check if overlay pops up", function() {
  2. it("opens success overlay when I click on submit", function(done) {
  3. browser
  4. // show overlay
  5. .click(".btn_submit")
  6. .isVisible("#overlay", function(err,overlayIsOpen) {
  7. assert(err === null);
  8. assert(overlayIsOpen === true);
  9. })
  10. // hide overlay
  11. .click(".btn_ok")
  12. .isVisible("#overlay", function(err,overlayIsOpen) {
  13. assert(err === null);
  14. assert(overlayIsOpen === false);
  15. })
  16. .call(done)
  17. });
  18. // other tests
  19. })

字符串
你可以在项目网站上找到很多其他的命令和例子。你可以在几个浏览器上运行这些测试,比如Chrome,Firefox,甚至在移动的设备上。其他流行的库,比如Wd.jsSelenium-Webdriver都是基于promise的,并且或多或少都是这样。

展开查看全部
57hvy0tb

57hvy0tb2#

我强烈推荐使用cypress进行前端集成测试。相应的实用程序使用mocha-chai测试套件以非常简单和直接的方式在网页上创建和评估测试用例。此外,您可以从命令行或GUI执行测试,其中显示视频,它还可以记录每个测试。下面是一个小示例:

  1. describe('Test myProjects input fields', function () {
  2. beforeEach(() => {
  3. cy.visit('https://webpage.link/go/alink')
  4. })
  5. it('fills Project form', () => {
  6. cy.contains('Where is your item located?')
  7. cy.get('myelement-component-autocomplete[myelement="myProject/Home/hotelName"]').within(() => {
  8. cy.get('input').type('Hilton')
  9. })
  10. cy.get('myelement-component-datetime[myelement="myProject/Home/departureDate"]').within(() => {
  11. cy.get('input').type('2/4/2019')
  12. })
  13. })
  14. }

字符串
稍后,您可以将其添加到项目CI管道中,每次推送更改时,前端测试也会进行评估。

展开查看全部
piok6c0g

piok6c0g3#

我为此使用的两个工具是Selenium Webdriver和Selenium JS + Mocha。
如果你想测试实际用户会看到什么,我会使用Webdriver。Webdriver是一个无头浏览器。Webdriver实际上驱动一个真实的浏览器(Chrome,Firefox等)。
代码示例,使用Python

  1. from selenium import webdriver
  2. browser = webdriver.Chrome()
  3. # at this point a chrome window will open
  4. browser.get('http://example.com')
  5. div = browser.find_element_by_css_selector('div.my-class')
  6. assert div.text == 'The content I want to be there'

字符串
我看到现在也有JavaScript绑定(当然)。

lvmkulzt

lvmkulzt4#

这似乎是一种隐藏的知识,但实际上它很简单。
前端的集成测试具有最佳价值。您可以使用UI元素进行交互,拦截对后端的调用,并验证它们是否反映了您所做的工作。您还可以存根服务器响应,以便您可以模拟不同的场景,而无需配置真实的后端服务器。
您可以在E2E模式下使用Cypress进行测试(但不要使用真实的e2e,因为这类测试太脆弱和困难)。
例如:

  1. // Cypress logic is hidden.
  2. // Tests are in BDD style
  3. // DSL layer is responsible for changing "user actions" into "app actions"
  4. // there are no notion of "buttons", "style" etc in the test case itself
  5. describe('Show User History', () => {
  6. // usersPage is a page object that sits in DSL layer. Only it interacts with Cypress
  7. const usersPage = new UsersPage();
  8. it('Should open users page', () => {
  9. //Given
  10. const user1 = UserBuilder().WithName("John", "Smith");
  11. const usersResponse = UsersBuilder()
  12. .withUser(user1)
  13. .withUser("Anna", "Smith")
  14. .build();
  15. usersPage.respondsWithUsers(usersResponse);
  16. // When
  17. usersPage.visit();
  18. // Then
  19. usersPage.shouldHaveEntriesCount(2);
  20. usersPage.shouldContain(user1);
  21. });
  22. });

字符串

展开查看全部

相关问题