我最近升级到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) 我正在尝试使用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
我有以下方法:
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) unit-testing ×2
javascript ×1
laravel ×1
mocking ×1
mysql ×1
mysqldump ×1
php ×1
phpunit ×1
rxjs ×1