小编Lau*_*hel的帖子

如何使用 docker 执行器禁用同一个 gitlab 运行器上的并发作业?

我正在使用 gitlab 社区版 14.4.1 以及一个版本 14.4.0 的 gitlab 运行程序。其配置如下:

concurrent = 1
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "My runner"
  limit = 1
  url = "https://my-gitlab-instance.com"
  token = "my-gitlab-token"
  executor = "docker"
  [runners.custom_build_dir]
    enabled = true
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.docker]
    tls_verify = false
    image = "gitlab/dind:latest"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/builds:/builds:rw", "/cache"]
    shm_size = 1000000000
Run Code Online (Sandbox Code Playgroud)

特别注意两个选项

concurrent = 1
Run Code Online (Sandbox Code Playgroud)

[[runners]]
  limit = 1 …
Run Code Online (Sandbox Code Playgroud)

gitlab docker gitlab-ci gitlab-ci-runner

8
推荐指数
1
解决办法
4299
查看次数

如何摆脱 v-on 处理程序中的错误:“TypeError:_vm.myFcn 不是函数”?

根据文档,我编写了一个包含以下逻辑的 Vue 组件:

import debounce from 'lodash/debounce'

export default {
  [...]
  created () {
    this.debouncedOnSubmit = debounce(this.doSubmit, 1000)
  },
  [...]
Run Code Online (Sandbox Code Playgroud)

这背后的想法是我的表单debouncedOnSubmit在提交表单时调用该方法:

        <button
          name="order-basket"
          type="submit"
          @click.prevent="debouncedOnSubmit"
        >
          Click me!
        </button>
Run Code Online (Sandbox Code Playgroud)

现在,该代码在我的应用程序以及我的笑话测试中运行良好。例如,使用 vue test utils,我可以触发click该按钮上的事件,并且可以成功验证单击该按钮时应该发生的相关内容。

但是,我收到以下恼人的警告:

[Vue warn]: Error in v-on handler: "TypeError: _vm.debouncedOnSubmit is not a function"
Run Code Online (Sandbox Code Playgroud)

我部分理解为什么我会收到该警告。确实,我this.debouncedOnSubmitcreated()钩子中定义了。尽管该方法返回一个函数,但 Jest 很可能不理解该变量的含义debounce

如何让 jest 理解这debouncedOnSubmit是一个函数?我需要配置什么?

我不想禁用警告,如此处所述因为我确实想在测试中保留有关我的行为的反馈。大多数时候,这些警告确实很有帮助,但我对关闭它们感到不舒服。我该如何编写代码才能修复此警告?

编辑

  • 改变
[Vue warn]: Error in v-on handler: "TypeError: _vm.debouncedOnSubmit is …
Run Code Online (Sandbox Code Playgroud)

javascript testing vue.js jestjs vue-test-utils

6
推荐指数
1
解决办法
1万
查看次数

我如何等待 cookie 设置?

我正在为我的应用程序的登录功能编写验收测试。在某些时候,我想仔细检查 cookie 的过期时间。

单击“登录”按钮后,一个 graphql 查询将发送到我的服务器,该服务器以 Jwt 进行响应。收到 jwt 后,应用程序将设置 cookie

document.cookie = ...
Run Code Online (Sandbox Code Playgroud)

在我的 Cypress 测试中,我通过以下方式检查令牌:

Then("sa session s'ouvre pour {SessionDurationType}", expectedDuration => {
  cy.get('@graphql').then(() => {
    cy.wait(1000)
    cy.getCookie('token').then(cookie => {
      const tokenDuration = getTokenDuration(cookie.value)
     expect(tokenDuration.asSeconds()).to.equal(expectedDuration.asSeconds())
    })
  })
})
Run Code Online (Sandbox Code Playgroud)

使用cy.get('@graphql'),我正在等待 graphql 查询返回响应。别名定义如下:

cy.stub(win, 'fetch', fetch).as('graphql')
Run Code Online (Sandbox Code Playgroud)

收到后,应用程序会设置 cookie。

我的问题是我不喜欢以下调用:

cy.wait(1000)
Run Code Online (Sandbox Code Playgroud)

如果没有那个调用,我总是会得到一个未定义的 cookie。

有没有办法在远小于 1000 毫秒的时间内获取该 cookie?我尝试了很多事情但没有成功......

javascript cookies cucumber graphql cypress

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

如何在 QML 的矩形中包装一些文本?

我必须执行一个非常简单的任务:我想在一个矩形内显​​示一段文本,该矩形的大小应该正好是文本的宽度。

在 C++ 中,这很容易做到。只需定义 QString 并应用 QFontMetrics 即可获得其宽度。然后定义矩形图形元素以具有该大小。它在五分钟内完成。

I have heard that QML is easier to use. Therefore, I was expecting to solve that problem in less than five minutes. I didn't, and I'm still stuck at it. Here's what I have tried:

Rectangle {
    width: myText.contentWidth
    height: myText.contentHeight

    Text {
        anchors.fill:parent
        id: myText
        font.family: "Helvetica"
        font.pointSize: 50
        text:  qsTr("The string I want to display")
    }
}
Run Code Online (Sandbox Code Playgroud)

This doesn't work for some reason I don't understand. I have found a …

text word-wrap qml

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

如何将 system_clock::now() 与 c++20 中的本地时间进行比较?

我正在测试如下的库:

std::chrono::system_clock::time_point FromDateTime(const DateTime& dateTime)
{
    std::tm tm{};
    tm.tm_year = dateTime.Year - 1900;
    tm.tm_mon = dateTime.Month - 1;
    tm.tm_mday = dateTime.Day;
    tm.tm_hour = dateTime.Hour;
    tm.tm_min = dateTime.Minute;
    tm.tm_sec = dateTime.Second;

    const auto& time = std::mktime(&tm);
    const auto& timePoint = std::chrono::system_clock::from_time_t(time);

    return timePoint;
}

TEST_F(MyLibraryFixture, GetDateTime)
{
    // Arrange
    const auto& now = std::chrono::system_clock::now();

    // Act
    const auto& actual = _testee->GetDateTime();

    // Assert
    const auto& timeDiscrepanceInSec = std::chrono::duration_cast<std::chrono::seconds>(FromDateTime(actual) - now);
    ASSERT_TRUE(timeDiscrepanceInSec.count() < 10);
}
Run Code Online (Sandbox Code Playgroud)

DateTime类型只是带有上述使用字段的原始结构。电话

_testee->GetDateTime();
Run Code Online (Sandbox Code Playgroud)

返回一个DateTime结构体,日期时间实际上是 …

c++ datetime c++20

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

如何将自定义 GraphicsItem 集成到 QML 场景中?

假设您已经QGraphicsRectItem在 C++ 中创建了以下自定义:

class MyCustomItem : public QGraphicsRectItem
{
  public:
    MyCustomItem(MyCustomItem* a_Parent = 0);
    virtual ~MyCustomItem();

    // specific methods

  private:
    // specific data
};
Run Code Online (Sandbox Code Playgroud)

还假设您在 QML 脚本中定义了一个ApplicationWindow

// main.qml
import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Window 2.0

ApplicationWindow {
    id: myWindow
    title: qsTr("My Window")
    width: 640
    height: 480
    visible: true
}
Run Code Online (Sandbox Code Playgroud)

我想做的简单任务是显示MyCustomItemin that的实例ApplicationWindow。我想做以下事情:

// part of main.cpp
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    MyCustomItem* myItem; …
Run Code Online (Sandbox Code Playgroud)

qt qgraphicsitem qml qtquick2

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

如何使QML TextField绑定在Android下工作?

我目前正在尝试为Android编写QML / C ++应用程序。在代码的某个地方,我有一个看起来像这样的类:

class MyClass : public QObject
{
  Q_OBJECT

  Q_PROPERTY(QString prop READ prop WRITE setProp NOTIFY propChanged)

public:
  explicit MyClass(QObject* a_Parent = 0);

  QString prop() const
  {
    return m_Prop;
  }

  void setProp(const QString& a_Value)
  {
    m_Prop = a_Value;
    emit propChanged();
  }

signals:
  void propChanged();

private:
  QString m_Prop;
};
Run Code Online (Sandbox Code Playgroud)

在我的QML资料中的某处,我有一个通过以下方式定义的Item:

ColumnLayout {
  TextField {
    id: myField
    placeholderText: qsTr("Enter text")
    Layout.fillWidth: true
    Binding {
      target: myClass
      property: "prop"
      value: myField.text
    }
}
Run Code Online (Sandbox Code Playgroud)

当然,我做了一切必要的工作,以使MyClass类型的对象myClass在C ++和QML之间共享(作为上下文属性)。

现在,问题就出在下面:无论我在Android上的上述文本字段中键入什么,都不会将最后一个单词从myField.text传递到MyClass.m_Prop。例如,如果我在TextField中键入文本“我对此文本字段不满意”,则myClass.m_Prop将包含“我对此文本不满意”。但是,如果键入“我对这个TextField不满意”(注意空格),然后删除最后一个空格,则所需的字符串将存储在m_Prop变量中。

奇怪的是,这在Linux下工作得很好。有人可以告诉我我在这里想念的吗?我正在使用Qt 5.7和Android 6.0。

谢谢你的帮助 ...

c++ qt android textfield qml

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