小编a.b*_*eri的帖子

如何测试 React ErrorBoundary

React 的新手,但不是测试应用程序。

我想确保每次组件抛出错误时都会显示 ErrorBoundary 消息。如果你不知道我所说的 ErrorBoundary 是什么意思,这里是一个链接

我正在使用Mocha + Chai + Enzyme

假设我们需要使用以下测试配置来测试React 计数器示例

测试配置

// DOM
import jsdom from 'jsdom';
const {JSDOM} = jsdom;
const {document} = (new JSDOM('<!doctype html><html><body></body></html>')).window;
global.document = document;
global.window = document.defaultView;
global.navigator = global.window.navigator;

// Enzyme
import { configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
configure({ adapter: new Adapter() });

// Chai
import chai from 'chai';
import chaiEnzyme from 'chai-enzyme';
chai.use(chaiEnzyme());
Run Code Online (Sandbox Code Playgroud)

更新 1 - 一些后来的想法

在阅读了有关连接组件的最佳测试方法(涉及类似问题)的对话 …

testing unit-testing reactjs enzyme

9
推荐指数
2
解决办法
6464
查看次数

如何使用 React Jest 时间旅行到动画结束

我正在尝试测试在 TweenMax 动画后更改状态的组件。浏览器上一切正常,但我无法理解如何为其编写测试。

问题是Jest不会等待动画完成,因此状态不会改变。

我也试过jest.runAllTicks()jest.runAllTimers()

这里的一些代码最终会模拟我正在做的事情:

成分

class HelloWorld extends React.Component {
    constructor(props) {
        super(props);
        this.state = { done: false };
        this.p;
    }

    componentDiDMount() {
        TweenMax.to(ReactDOM.findDOMNOde(this.p), 1, { 
            onComplete: () => {
                this.setState({ done: true })
            }
        })
    }

    renderMessage() {
        if (this.state.done) {
            return "Hello World";
        } else {
            return "Loading...";
        }
    }

    render () {
        return <p ref={p => this.p = p}>{this.renderMessage()}</p>;
    }       
}
Run Code Online (Sandbox Code Playgroud)

测试(基本结构)

describe("test",()=>{
    it("works", ()=>{
        const …
Run Code Online (Sandbox Code Playgroud)

reactjs jestjs gsap

7
推荐指数
1
解决办法
3820
查看次数

无法部署 MySQL pod。--initialize 指定但数据目录中有文件

我正在尝试使用 Kubernetes 在 Digital Ocean 上设置一个 MySQL pod。

我不断收到此错误:

Initializing database
2019-03-05T14:32:58.707421Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2019-03-05T14:32:58.708753Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
2019-03-05T14:32:58.711746Z 0 [ERROR] Aborting
Run Code Online (Sandbox Code Playgroud)

我的 yaml 有很多东西,但对这部分配置感兴趣的行如下。

# ------------------- Persistent Volume Claim ------------------- #

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: test-mysql-volume-claim
  ...
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
  storageClassName: do-block-storage

---

# ------------------- …
Run Code Online (Sandbox Code Playgroud)

mysql digital-ocean kubernetes persistent-volume-claims

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

axios({method: "post"}) 和 axios.post() 的区别

我正在使用 Shopify Storefront API 和 Axios 在本地开发电子商店。

Shopify给我一个回应时,我使用axios(),但它返回403 Forbidden时,我做同样的事情axios.post()

这两者有什么区别?

axios.post(
    SHOPIFY_DOMAIN,
    {
    headers: {
        "Content-Type": "application/graphql",
        "X-Shopify-Storefront-Access-Token": SHOPIFY_TOKEN
    },
    data: `{ shop }`
})
Run Code Online (Sandbox Code Playgroud)
axios({
  method: "post",
  url: SHOPIFY_DOMAIN,
  headers: {
    "Content-Type": "application/graphql",
    "X-Shopify-Storefront-Access-Token": SHOPIFY_TOKEN
  },
  data: `{ shop }`
})
Run Code Online (Sandbox Code Playgroud)

javascript api shopify graphql axios

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

如何访问 docker-for-desktop 上的 PersistentVolume 文件?

我想在本地计算机 (macOS) 上访问和编辑 Kubernetes PersistentVolume 中的文件,但我不知道在哪里可以找到这些文件!

我指着我的hostPath/tmp/wordpress-volume但我无法在任何地方找到它。我想念的隐藏秘密是什么

我在docker-for-desktop cluster上使用以下配置Version 2.0.0.2 (30215)

持久卷

kind: PersistentVolume
metadata:
  name: wordpress-volume
spec:
  # ...
  hostPath:
    path: /tmp/wordpress-volume
Run Code Online (Sandbox Code Playgroud)

持久卷声明

kind: PersistentVolumeClaim
metadata:
  name: wordpress-volume-claim
# ...
Run Code Online (Sandbox Code Playgroud)

部署

kind: Deployment
metadata:
  name: wordpress
# ...
spec:
  containers:
  - image: wordpress:4.8-apache
    # ...
    volumeMounts:
    - name: wordpress-volume
      mountPath: /var/www/html
  volumes:
  - name: wordpress-volume
    persistentVolumeClaim:
      claimName: wordpress-volume-claim
Run Code Online (Sandbox Code Playgroud)

docker kubernetes docker-volume persistent-volumes

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

无法弄清楚如何使用redux-saga-test-plan测试redux-saga函数

我在教自己如何使用redux-saga,同时教自己单元测试,特别是Jest.我从redux-saga的文档中获取了一个样本saga,这里:

http://yelouafi.github.io/redux-saga/docs/advanced/NonBlockingCalls.html

......并为了我自己的目的修改它.它应该是一个简单的身份验证处理程序,它侦听登录或注销操作(因为该函数不知道用户是否登录),然后采取适当的操作.我已经在应用程序中测试了该功能,它似乎按预期运行,这很棒.这是功能:

function* authFlow() { 
    while (true) {
        const initialAction = yield take (['LOGIN', 'LOGOUT']);
        if (initialAction.type === 'LOGIN') {
            const { username, password } = initialAction.payload;
            const authTask = yield fork(
                authorizeWithRemoteServer, 
                { username: username, password: password }
            );
            const action = yield take(['LOGOUT', 'LOGIN_FAIL']);
            if (action.type === 'LOGOUT') {
                yield cancel(authTask);
                yield call (unauthorizeWithRemoteServer)
            }
        } else {
            yield call (unauthorizeWithRemoteServer)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它似乎相当简单,但我很难测试它.以下是基于Jest的测试脚本的注释版本:

it ('authFlow() should work with successful login and then successful …
Run Code Online (Sandbox Code Playgroud)

unit-testing jestjs redux redux-saga redux-saga-test-plan

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

Kubernetes 不将数据复制到已安装的卷中

根据此处的文档:\n https://docs.docker.com/storage/volumes/

\n\n
\n

如果启动一个创建新卷的容器,如上所述,并且该容器在要挂载的目录(例如上面的/app/)中有文件或目录,则目录\xe2\x80\x99s内容将被复制到该卷中。然后容器安装并使用该卷,并且使用该卷的其他容器也可以访问预先填充的内容。

\n
\n\n

换句话说,期望是,如果我在 /var/lib/mysql 中有这样的文件

\n\n
root@d8fa9a8b305a:/var/lib/mysql# ls\nauto.cnf         xtz           ib_logfile0  ibdata1  mysql               sys\ndebian-5.7.flag  ib_buffer_pool  ib_logfile1  ibtmp1   performance_schema\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后,当我将卷装入时,/var/lib/mysql容器中的所有文件都应复制到我的卷中。

\n\n

但我发现这并没有发生:

\n\n
/var/lib/mysql/mysql # ls\nauto.cnf        ib_buffer_pool  ib_logfile0     ib_logfile1     ibdata1\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我挂载到 /var/lib/mysql 的卷的内容,正如您所看到的,该数据与 docker 映像本身的 /var/lib/mysql 中存在的数据不同。因此,结果是启动失败。

\n\n

注意:有问题的卷实际上是由 kubernetes 挂载的。所以,我在这里做出一个主要假设

\n\n
volumeMounts:\n        - name: xtz-persistent-storage\n          mountPath: "/var/lib/mysql/"\n
Run Code Online (Sandbox Code Playgroud)\n\n

相当于这样做:docker run -p 443:443 --rm -v mysql:/var/lib/mysql <image>

\n

mysql docker kubernetes

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

如何在鼠标移动时重新创建 Three.js OrbitControl 移动?

我想在没有单击和拖动的情况下重新创建 Three.js OrbitControl 运动,即简单地使相机跟随鼠标移动。

我试图从头开始重新创建它,但是太费力了,因为问题是相机在三个轴上移动,而不仅仅是两个。我很确定有些人以前做过。

具体来说,我希望相机围绕场景原点移动,并与它保持相同的距离。

javascript perspectivecamera three.js

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

Kubernetes 部署填充了错误的持久卷

我正在尝试创建两个部署,一个用于 Wordpress,另一个用于 MySQL,它们指的是两个不同的持久卷。

有时,在删除和重新创建卷和部署时,MySQL 部署会填充 Wordpress 卷(以wordpress-volume目录中的数据库结束)。

当你这样做时,这会更清楚kubectl get pv --namespace my-namespace

mysql-volume       2Gi   RWO  Retain  Bound  flashart-it/wordpress-volume-claim   manual                   1h
wordpress-volume   2Gi   RWO  Retain  Bound  flashart-it/mysql-volume-claim       manual
Run Code Online (Sandbox Code Playgroud)

.

我很确定设置没问题。请在下面找到 yaml 文件。

持久卷声明 + 持久卷

kind: PersistentVolume
apiVersion: v1
metadata:
  namespace: my-namespace
  name: mysql-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /path/to/mount/mysql-volume
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  namespace: my-namespace
  name: mysql-volume-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources: …
Run Code Online (Sandbox Code Playgroud)

persistent-storage docker kubernetes persistent-volume-claims

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

Capistrano 多个部署阶段

我有一个 Rails 应用程序,我想使用 Capistrano 部署两个版本:productionstaging.

在我的 deploy.rb 文件中,我有: set :stages, ['staging', 'production']

那么如何在不覆盖它们的情况下使用两条路径?

set :deploy_to, '/home/deploy/Sites/staging/myname'

set :deploy_to, '/home/deploy/Sites/production/myname'

我看过这个答案,但我想保持命令行干净。

deployment ruby-on-rails capistrano3

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