小编pet*_*ing的帖子

MYSQL导入:无法从发送到GEOMETRY字段的数据中获取几何对象

我最近升级到MySQL 5.7并尝试从5.6 master运行复制.但是复制失败并出现以下错误:

Error 'Cannot get geometry object from data you send to the GEOMETRY field' on query.
Run Code Online (Sandbox Code Playgroud)

事实证明,当我尝试从mysqldump导入数据时也会发生这种情况.表结构如下:

 CREATE TABLE `locations` (
  `location_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `country_id` int(10) unsigned NOT NULL,
  `name` varchar(100) CHARACTER SET utf8 NOT NULL,
  `locations_type_id` int(11) unsigned NOT NULL,
  `parent_id` int(11) unsigned DEFAULT NULL,
  `importance` decimal(3,2) NOT NULL DEFAULT '1.00',
  `lat` decimal(10,7) DEFAULT NULL,
  `lng` decimal(10,7) DEFAULT NULL,
  `radius` decimal(6,3) DEFAULT NULL,
  `polygon` polygon DEFAULT NULL,
  PRIMARY KEY (`location_id`),
  KEY `name` (`name`,`locations_type_id`,`parent_id`,`lat`,`lng`),
  KEY …
Run Code Online (Sandbox Code Playgroud)

mysql mysqldump mysql-workbench

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

函数式javascript和RxJS中的依赖注入和模拟

我正在尝试使用RxJS和函数组合将用经典OO Javascript编写的库重写为更具功能性和反应性的方法.我已经开始使用以下两个易于测试的函数(我跳过了Observables的导入):

创建-connection.js

export default (amqplib, host) => Observable.fromPromise(amqplib.connect(host))
Run Code Online (Sandbox Code Playgroud)

创建-channel.js

export default connection => Observable.fromPromise(connection.createChannel())
Run Code Online (Sandbox Code Playgroud)

我要做的就是测试它们是注入amqplib或连接的模拟,并确保调用正确的方法,如下所示:

import createChannel from 'create-channel';

test('it should create channel', t => {
    const connection = { createChannel: () => {}};
    const connectionMock = sinon.mock(connection);

    connectionMock.expects('createChannel')
        .once()
        .resolves('test channel');

    return createChannel(connection).map(channel => {
        connectionMock.verify();
        t.is(channel, 'test channel');
    });
});
Run Code Online (Sandbox Code Playgroud)

所以现在我想将这两个函数放在一起:

import amqplib from 'amqplib';
import { createConnection, createChannel } from './';

export default ({ host }) => 
    createConnection(amqlib, host)
        .mergeMap(createChannel)
Run Code Online (Sandbox Code Playgroud)

然而,虽然这限制了我在测试时的选择,因为我无法注入amqplib的模拟.我也许可以将它作为依赖项添加到我的函数参数中,但这样我就必须在树中遍历并传递依赖关系,如果任何其他组合将要使用它.此外,我希望能够模拟createConnection和createChannel功能,甚至不必测试我之前测试过的相同行为,我是否意味着我必须将它们作为依赖项添加?

如果是这样,我可以在我的构造函数中有一个带有依赖项的工厂函数/类,然后使用某种形式的控制反转来管理它们并在必要时注入它们,但这实际上使我回到了我开始的面向对象方法. …

javascript unit-testing functional-programming dependency-injection rxjs

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

嘲笑用 andReturn 返回新对象

我有以下方法:

public function getThreads()
{
    $results = \DB::select(\DB::raw(config('sql.messages.threads')), [$this->user->user_id]);

    $messagesThreadsModel = app()->make(MessagesThreadsModel::class);
    $messages = [];

    foreach ($results as $r) {
        $message = $messagesThreadsModel->find($r->messages_thread_id);
        $message->unread = $r->unread;
        $messages[] = $message;
    }

    return $messages;
}
Run Code Online (Sandbox Code Playgroud)

为了测试上面的内容,我模拟了调用 \DB::select (通过 Laravel 的外观)以返回对象列表,就像 DB 类通常所做的那样。然后我加载消息线程模型,该模型再次被模拟并在容器中替换(因此 app()->make() 将返回其模拟实例,而不是实际模型)。

最后这个:

$messagesThreadsModel->find($r->messages_thread_id);
Run Code Online (Sandbox Code Playgroud)

再次被模拟返回一个虚拟对象(存根?)。所有内容如下:

$threadsList = $this->mockThreads();

    // mock the raw expression, check the query 
    \DB::shouldReceive('raw')->once()->with(m::on(function($sql)
    {
        return strpos($sql, 'messages') !== false;
    }))->andReturn(true);

    // mock the DB call, return a list of objects
    \DB::shouldReceive('select')->once()->with(true, [$this->usersModel->user_id, $this->usersModel->user_id, $this->usersModel->user_id])->andReturn($threadsList);

    $mockThreadResult = …
Run Code Online (Sandbox Code Playgroud)

php phpunit unit-testing mocking laravel

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