小编Bon*_*teq的帖子

在 UI 测试我的 SwiftUI 应用程序时如何访问 VStack

我有一个VStack依赖该.onTapGesture方法的代码。像这样的东西:

VStack {
    if imageShow {
        Image("image1")
    }
    else {
        Image("image2")
    }
}
.onTapGesture {
    imageShow.toggle()
}
Run Code Online (Sandbox Code Playgroud)

我想使用 XCTest 在 UI 测试中测试此行为。问题是,我不知道如何访问 VStack 以便.tap()对其应用 a 。我似乎找不到附加的方法app。使用 找到了一个按钮app.buttons[],但似乎没有app.VStack或 的等效项app.HStack

另外,我尝试将此代码转换为将 包装VStack在 a 中Button,但由于某种原因,这覆盖了我的图像,扭曲了首选行为。

VStack使用我正在使用的完整代码片段进行更新:

VStack(alignment: .leading, spacing: 0) {
    ZStack {
        if self.create_event_vm.everyone_toggle == true {
            Image("loginBackground")
                .resizable()
                .accessibility(identifier: "everyone_toggle_background")
            }
        HStack {
            VStack(alignment: .leading, spacing: 0) {
                Text("Visible to everyone on …
Run Code Online (Sandbox Code Playgroud)

xctest xcuitest swiftui

6
推荐指数
2
解决办法
2194
查看次数

drf-nested-routers RuntimeError('未找到父注册资源')

我正在尝试利用包 drf-nested-routers 在我的 API 中创建嵌套路由。

我试图跟随文档(https://github.com/alanjds/drf-nested-routers)并阅读多个 Stackoverflow 线程,希望能找出这个问题。

我想创建一个 NestedSimpleRouter。这是我目前在 routers.py 文件中的内容:

from django.urls import path, include
from rest_framework.routers import DefaultRouter
from rest_framework_nested import routers
from api_v1.viewsets import DeviceViewSet, BreadcrumbViewSet

router = DefaultRouter()
router.register(r'devices', DeviceViewSet, base_name='devices')

device_breadcrumbs_router = routers.NestedSimpleRouter(router, r'breadcrumbs', lookup='breadcrumb')
device_breadcrumbs_router.register(r'breadcrumbs', BreadcrumbViewSet, base_name='breadcrumbs')

api_url_patterns = [
    path('', include(router.urls)),
    path('', include(device_breadcrumbs_router.urls)),
]
Run Code Online (Sandbox Code Playgroud)

然后我将 包含api_url_patterns在我的 urls.py 文件中:

from django.contrib import admin
from django.urls import path, include
from .routers import api_url_patterns

urlpatterns = [
    path('api/v1/', include(api_url_patterns)),
    path('admin/', admin.site.urls), …
Run Code Online (Sandbox Code Playgroud)

nested-routes django-rest-framework drf-nested-routers

5
推荐指数
1
解决办法
1071
查看次数

typeText() 正在输入不一致的字符

我开始在编写 UI 测试的同时尝试使用 Swift,但在向文本字段中输入文本时遇到了问题。下面是代码:

func testLoginUsernameField() {
    let app = XCUIApplication()
    app.launch()

    let username = "testusername2"

    let usernameField = app.textFields["username_field"]
    XCTAssertTrue(usernameField.exists)

    usernameField.tap()
    usernameField.typeText(username)
    XCTAssertEqual(usernameField.value as! String, username)
}
Run Code Online (Sandbox Code Playgroud)

当我这样做时就会出现问题usernameField.typeText(username)。我的文字继续写,tstusername2而不是testusername2.

xctest swift xctestcase

4
推荐指数
1
解决办法
1087
查看次数

如果授权状态被拒绝,SwiftUI 将用户引导至其设置页面

我有一个函数可以调用来访问用户的联系信息。但是,我需要此功能来提示用户一个警报,如果授权状态被拒绝,该警报可以将他们重定向到其“设置”页面。

到目前为止,我的代码已成功提示用户输入联系信息。但是,如果案件最终被拒绝,我想运行该show_settings_alert函数,如下所示:

func requestContactPermissions(completion: @escaping (Bool) -> ()) {
    let store = CNContactStore()
    var authStatus = CNContactStore.authorizationStatus(for: .contacts)
    switch authStatus {
    case .denied:
        show_settings_alert()
}

Run Code Online (Sandbox Code Playgroud)

这是show_settings_alert我在一些有关此问题的教程中找到的函数:

func show_settings_alert() {
    let alertController = UIAlertController(title: "TITLE", message: "Please go to Settings and turn on the permissions", preferredStyle: .alert)
    let settingsAction = UIAlertAction(title: "Settings", style: .default) { (_) -> Void in
        guard let settingsUrl = URL(string: UIApplication.openSettingsURLString) else {
            return
        }
        if UIApplication.shared.canOpenURL(settingsUrl) {
            UIApplication.shared.open(settingsUrl, completionHandler: { (success) in …
Run Code Online (Sandbox Code Playgroud)

uikit swift swiftui

3
推荐指数
1
解决办法
1559
查看次数

使用 NextJS useRouter 函数测试 Cypress 组件

我的导航栏组件依赖于useRouter提供的功能nextjs/router来设置活动链接的样式。

我正在尝试使用 Cypress 测试这种行为,但我不确定应该如何组织它。赛普拉斯似乎不喜欢getRoutePathname(),并且在我的测试环境中返回了未定义。

这是我要测试的组件:

import Link from 'next/link'
import { useRouter } from 'next/router'

function getRoutePathname() {
  const router = useRouter()
  return router.pathname
}

const Navbar = props => {
  const pathname = getRoutePathname()

  return (
    <nav>
      <div className="mr-auto">
        <h1>Cody Bontecou</h1>
      </div>
      {props.links.map(link => (
        <Link key={link.to} href={link.to}>
          <a
            className={`border-transparent border-b-2 hover:border-blue-ninja 
            ${pathname === link.to ? 'border-blue-ninja' : ''}`}
          >
            {link.text}
          </a>
        </Link>
      ))}
    </nav>
  )
}

export default Navbar
Run Code Online (Sandbox Code Playgroud)

我有 Cypress 组件测试运行程序的骨架设置,并且在硬编码时能够加载组件 …

next.js cypress cypress-component-test-runner

3
推荐指数
1
解决办法
2182
查看次数

似乎无法在 text() 和 textfield() 之间使用 Spacer()

当我在 HStack 中并尝试在 Text 和 Textfield 视图之间创建空间时,我似乎无法使用 Spacer() 函数。间隔器用于间隔视图的其他区域,但每当我尝试在这两个元素之间间隔时,它就不起作用。

这是我正在使用的代码:

    VStack(alignment: .leading, spacing: 0) {
        Rectangle()
            .frame(height: 2, alignment: .top)
            .foregroundColor(Color("grey2"))
        Text("Tickets")
            .kerning(0.5)
            .scaledFont(name: "Gotham Medium", size: 18)
            .foregroundColor(Color("grey4"))
            .padding(.horizontal)
            .padding(.bottom, 3)
            .padding(.top, 35)
        Rectangle()
            .frame(height: 2, alignment: .top)
            .foregroundColor(Color("grey2"))

        HStack {
            Text("Ticket URL")
                .kerning(0.5)
                .scaledFont(name: "Gotham Book", size: 16)
                .foregroundColor(Color("spaceblack"))

            Spacer()

            TextField("Enter URL", text: $url)
        }
        .background(Color.blue)
        .padding()

        Rectangle()
            .frame(height: 2, alignment: .top)
            .foregroundColor(Color("grey2"))
    }
    .frame(maxWidth: .infinity)
    .background(Color.red)
Run Code Online (Sandbox Code Playgroud)

swiftui

2
推荐指数
1
解决办法
1246
查看次数