我试图在我的process.on('SIGTERM')回调中使用Jest对一个计时器进行单元测试,但似乎从未调用过.我正在使用jest.useFakeTimers(),虽然它似乎模拟了setTimeout对某个范围的调用,但它setTimeout.mock在检查时并不会在对象中结束.
我的index.js文件:
process.on('SIGTERM', () => {
console.log('Got SIGTERM');
setTimeout(() => {
console.log('Timer was run');
}, 300);
});
setTimeout(() => {
console.log('Timer 2 was run');
}, 30000);
Run Code Online (Sandbox Code Playgroud)
和测试文件:
describe('Test process SIGTERM handler', () => {
test.only('runs timeout', () => {
jest.useFakeTimers();
process.exit = jest.fn();
require('./index.js');
process.kill(process.pid, 'SIGTERM');
jest.runAllTimers();
expect(setTimeout.mock.calls.length).toBe(2);
});
});
Run Code Online (Sandbox Code Playgroud)
并且测试失败:
预期值为(使用===):2已接收:1且控制台日志输出为:
console.log tmp/index.js:10
Timer 2 was run
console.log tmp/index.js:2
Got SIGTERM
Run Code Online (Sandbox Code Playgroud)
如何setTimeout在这里运行?
我正在尝试将所有非子请求的请求重定向到www,同时保留请求URI.
我在我的.htaccess文件中使用它进行重定向:
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
Run Code Online (Sandbox Code Playgroud)
问题是,当我有这样的请求时:
example.com/search/?name=läkare
它重定向到:
www.example.com/search/?name=l%25C3%25A4kare
Run Code Online (Sandbox Code Playgroud)
这有点不对,它编码两次.我检查一下:
<?php
echo rawurlencode('läkare');//outputs l%C3%A4kare
echo "\n";
echo rawurldecode('l%25C3%25A4kare');//outputs l%C3%A4kare
echo "\n";
echo rawurldecode(rawurldecode('l%25C3%25A4kare'));//outputs läkare
Run Code Online (Sandbox Code Playgroud)
为什么要对它进行两次编码,如何防止它这样做呢?我没有1编码,但2太多了.
我有一个带导航控制器和标签栏控制器的ViewController.此ViewController有2个按钮,用于切换滚动视图和地图视图的可见性.最重要的是让这两个按钮始终显示在同一个地方,无论方向或恰好可见的视图.
我遇到的问题是MapView的大小不正确.如果我只是从self.view.bounds给它一个框架它位于导航栏/标签栏下 - 基本上占据了整个屏幕.这会抛弃我的切换按钮的位置.
我注意到我的ScrollView也是这样(使用背景颜色和半透明导航栏),但子视图在其上的位置保持在可见区域内(导航栏和标签栏之间).因此,当我添加切换按钮时,它们会显示在正确的位置.
当我按下切换按钮时,我只是将按钮的父视图重新分配给现在显示的视图(ScrollView或MapView).这总是适用于滚动视图,但由于定位,它们最终会在显示MapView时进入导航栏下方.
我已经尝试手动创建MapView的框架,但我得到奇怪的结果.我用它作为框架:
CGRect mapFrame = CGRectMake(
0,
(self.navigationController.navigationBar.frame.size.height + [UIApplication sharedApplication].statusBarFrame.size.height),
self.view.frame.size.width,
(
self.view.frame.size.height
- (self.navigationController.navigationBar.frame.size.height + [UIApplication sharedApplication].statusBarFrame.size.height + self.tabBarController.tabBar.frame.size.height)
)
);
Run Code Online (Sandbox Code Playgroud)
然后我设置自动调整大小的面具
[self.mapView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin];
Run Code Online (Sandbox Code Playgroud)
但有了这个,如果我以横向模式进入视图控制器 - MapView不在屏幕上.如果我进入纵向模式然后旋转到横向,则上边距关闭但大约10个点,因此它仍然位于导航栏下方(并且在标签栏和地图视图底部之间有可见边距).
如何使MapView子视图仅显示在可见区域内,就像ScrollView一样?如果地图本身位于导航栏/标签栏下方,我不介意
我有一个 python 脚本,它允许我使用简单的 Web 服务器(Flask)从我的手机与我的 Rapsberry Pi 进行交互。
在这个脚本中,我可以调用 omxplayer 来播放媒体文件,我通过这样的命令来做到这一点:
Popen(['omxplayer '+filePath], shell=True, stdin=None, stdout=None, stderr=None, close_fds=True)
Run Code Online (Sandbox Code Playgroud)
这工作正常,但随后我希望能够通过发送按键命令与此过程进行交互。当 omxplayer 运行时,您可以按空格键来播放/暂停,按箭头键来向前/向后跳过等等。我想从我的 python 脚本中以编程方式发送这些键盘输入,而不是要求一个人在键盘上手动按下它们。
使用 Python 打开后,如何从 Python 向该进程发送关键命令?
另外,如果有另一个正在运行的 omxplayer 实例当前没有从这个 Python 脚本运行,我如何从 Python 中检测到?例如,如果 omxplayer 被调用并从某人的 ssh 连接上运行,我如何在 python 脚本中检测到这个并在调用我自己的 omxplayer 进程之前终止这个进程?
我有一个MKMapView,我试图旋转地图相机标题跟随用户标题.我不想进行自动跟踪,因为它会强制缩放级别,这是我希望同时控制的内容.
问题是我发现如果提供354到6度之间的任何值,摄像机标题将恢复为0.例如,当我将摄像机标题设置为2时,它将在2和0之间不断反弹,直到我将手机转向另一个标题.
我的解决方案是在此范围之间将其锁定为0,但这不是最佳选择.有没有人知道为什么会这样?在标题更改时调用的方法如下所示:
- (void)setMapCameraPosition {
//354,6
if (self.heading <= 6 || self.heading >= 354) {
NSLog(@"****nulling heading. self.heading: %d camera.heading: %f", self.heading, self.mapView.camera.heading);
self.mapView.camera.heading = 0.0f;
}
else {
NSLog(@"changing heading. self.heading: %d camera.heading: %f", self.heading, self.mapView.camera.heading);
self.mapView.camera.heading = (double)self.heading;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我没有if语句并且只是将摄像机设置为我的标题,那么我的输出结果是:
self.heading: 357 camera.heading: -0.000000
self.heading: 357 camera.heading: -0.000000
self.heading: 357 camera.heading: -0.000000
Run Code Online (Sandbox Code Playgroud)
因此,如果我给出一个接近北方的值,那么接缝将会在一瞬间自动恢复到北方 - 使地图永远跳转.
如果没有地图删除我想要的标题,如何将标题设置为接近但实际上不是北方的程度?
我有一个实现Iterator并保存2个数组的对象:"entries"和"pages".每当我遍历这个对象时,我想修改条目数组,但是我得到了An iterator cannot be used with foreach by reference我在PHP 5.2中看到的错误.
我的问题是,如何Iterator在使用foreach它时使用类来更改循环对象的值?
我的代码:
//$flavors = instance of this class:
class PaginatedResultSet implements \Iterator {
private $position = 0;
public $entries = array();
public $pages = array();
//...Iterator methods...
}
//looping
//throws error here
foreach ($flavors as &$flavor) {
$flavor = $flavor->stdClassForApi();
}
Run Code Online (Sandbox Code Playgroud)
这样做的原因是,有时$flavors会不会是我的类的实例,而是将只是一个简单的数组.我希望能够轻松修改此数组,无论其类型如何.
我有一个MKMapView和一个永不改变的CLLocationCoordinate2D.我要做的是将地图居中,以便将此坐标放置在地图的底部中心.我可以使用简单的方法将地图置于此坐标中心:
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(mapCenter, 10000, 10000);
[self.mapView setRegion:viewRegion animated:YES];
Run Code Online (Sandbox Code Playgroud)
但是我怎样才能使地图以使得mapCenter坐标放置在地图底部的点为中心?如果可能的话,无论地图的初始缩放级别如何,我都希望它能够正常工作.
我试图保存一个NSDictionary数组值,NSUserDefaults但有一些奇怪的麻烦.
我NSDictionary已经NSStrings为keys每value一个NSArray的NSNumbers.当我打印字典时,一切都很好.我写这本字典NSUserDefaults,如果我马上把它读出来,一切都很好.使用这一切接缝就好了:
[[NSUserDefaults standardUserDefaults] setObject:self.selectedOptionPositions
forKey:PREF_OPTIONS_KEY];
[[NSUserDefaults standardUserDefaults] synchronize];
//THIS PRINT EVERYTHING OUT EXACTLY AS IT SHOULD!
NSLog(@"read after write: %@", [[NSUserDefaults standardUserDefaults]
objectForKey:PREF_OPTIONS_KEY]);
Run Code Online (Sandbox Code Playgroud)
当我创建一个处理它的类的新实例时,问题就来了.当我创建类的新实例并在init方法中检查时,NSDictionary如下所示:
NSLog(@"read initial: %@", [[NSUserDefaults standardUserDefaults]
objectForKey:PREF_OPTIONS_KEY]);
Run Code Online (Sandbox Code Playgroud)
当我打印该日志记录时,它NSDictionary包含所有键,但所有键values现在都是空的!keys重新创建类后,所有新添加的都存在,但没有values持久化.
这可能有什么问题?控制台中没有警告或错误.
我试图在ZF2中完成一些基本的路由,但我遇到了一些问题.
给我带来麻烦的部分是这样的:
'parent-categories' => array(
'type' => 'literal',
'options' => array(
'route' => '/kategorier/',
'defaults' => array(
'controller' => 'categories',
'action' => 'parent-categories',
),
),
'may_terminate' => true,
'child_routes' => array(
'child-categories' => array(
'type' => 'segment',
'options' => array(
'route' => '/kategorier[/:slug][/:parentCategoryid]/',
'constraints' => array(
'parentCategoryid' => '[0-9]+',
),
'defaults' => array(
'controller' => 'categories',
'action' => 'child-categories',
)
),
),
),
),
Run Code Online (Sandbox Code Playgroud)
最初的"父类别"路线工作正常,没问题.但问题是,子类别路线没有做任何事情.我有网址:
/ kategorier /试验试验试验试验试验/ 1 /
但这绝不匹配.我收到错误:
路由无法匹配请求的URL.
如果我将子类别路由从"child_routes"部分中取出,它总是捕获请求,即使该URL仅为/ kategorier /.谁能看到我在这里做错了什么?
我试图遍历具有特定类的所有input = text字段,并使用jQuery提取输入字段的值。尽管无论如何,我都无法获得值,它在控制台中给了我“(一个空字符串)”。
我如何获得价值?我的代码是:
$.each($('.datepicker'), function() {
console.log(this);
console.log($(this).val());
});
Run Code Online (Sandbox Code Playgroud)
输出为:
<input id="createdDate" class="datepicker hasDatepicker" type="text" onchange="setDueDate();" value="2013-06-19" size="8" name="invoice[createdDate]">
(an empty string)
<input id="dueDate" class="datepicker hasDatepicker" type="text" value="2013-06-19" size="8" name="invoice[dueDate]">
(an empty string)
Run Code Online (Sandbox Code Playgroud)
编辑:它表明问题部分是缓存的JS(即使文件在源中正确显示,它在执行旧的JS ...也很奇怪),而jQuery datepicker则把事情搞砸了。我像这样修复它:
$(document).ready(function() {
$('.datepicker').datepicker();
$.each($('.datepicker'), function() {
date = $(this).val();
$(this).datepicker('option', 'dateFormat', 'yy-mm-dd');
$(this).datepicker('setDate', date);
});
});
Run Code Online (Sandbox Code Playgroud) ios ×4
javascript ×2
mkmapview ×2
php ×2
.htaccess ×1
apache ×1
arrays ×1
foreach ×1
jestjs ×1
jquery ×1
linux ×1
mapkit ×1
mkmapcamera ×1
node.js ×1
nsarray ×1
nsdictionary ×1
objective-c ×1
python ×1
unit-testing ×1