我正在使用Mocha来测试Express.js应用程序中的一个小模块.在这个模块中,我的一个函数返回一个数组.我想测试数组对于给定输入是否正确.我是这样做的:
suite('getWords', function(){
test("getWords should return list of numbers", function() {
var result = ['555', '867', '5309'];
assert.equal(result, getWords('555-867-5309'));
});
});
Run Code Online (Sandbox Code Playgroud)
当它运行时,我得到以下断言错误:
AssertionError: ["555","867","5309"] == ["555","867","5309"]
Run Code Online (Sandbox Code Playgroud)
但是,当我将测试更改为a时assert.deepEqual
,测试通过正常.我想知道这是否是==
vs 的情况===
,但如果我进入
[1,2,3] === [1,2,3]
Run Code Online (Sandbox Code Playgroud)
进入node.js命令行,我仍然得到假.
为什么数组不像其他值那样比较(例如1 == 1
)?和assert.equal和assert.deepEqual有什么区别?
我想显示产品浏览历史记录,因此我将产品ID存储在浏览器cookie中.
因为历史列表限制为5个项目,所以我将cookie值转换为数组,然后检查它的长度并减少冗余.
下面的代码是我尝试过的,但它不起作用; 数组项未被删除.
我想问一下如何限制数组长度,这样它只能存储5个项目?
要么
如何在数组索引4之后剪切项目?
var id = product_id;
var browseHistory = $.cookie('history');
if (browseHistory != null) {
var old_cookie = $.cookie('history');
var new_cookie = '';
if (old_cookie.indexOf(',') != -1) {
var arr = old_cookie.split(',');
if (arr.length >= 5) {
arr.splice(4, 1)
}
}
new_cookie = id + ',' + old_cookie;
$.cookie('history', new_cookie, { expires: 7, path: '/' });
} else {
$.cookie('history', id, { expires: 7, path: '/' });
}
Run Code Online (Sandbox Code Playgroud) 我一直在使用ConfigParser模块编写配置文件.然而,最近一个想法让我感到震惊; 为什么不使用纯Python呢?以此示例配置文件为例:
[parameters]
# Host
host = stackoverflow.com
port = 22
Run Code Online (Sandbox Code Playgroud)
要将这些值读入我的代码,我会这样做
import ConfigParser
config = ConfigParser.SafeConfigParser()
config.read('host.cfg')
host = config.get('parameters', 'host')
port = config.get('parameters', 'port')
Run Code Online (Sandbox Code Playgroud)
另一方面,如果我有这样的配置文件:
# Host
host = 'stackoverflow.com'
port = 22
Run Code Online (Sandbox Code Playgroud)
在我的主要代码中,我可以这样做:
from host_cfg import *
Run Code Online (Sandbox Code Playgroud)
那么使用ConfigParser模块可以获得什么?每种方法的优缺点是什么?
在金字塔文档中,Sqlalchemy Dispatch Tutorial使用虚拟数据security.py
.我需要使用mysql数据,所以我实现了这样:
我的登录代码
@view_config(route_name='login', renderer='json',permission='view')
def user_login(request):
session = DBSession
username = request.params['username']
password = request.params['password']
sha = hashlib.md5()
sha.update(password)
password = sha.digest().encode('hex')
user = session.query(Users).filter(and_(Users.username==username,Users.password ==password)).count()
if(user != 0):
headers = remember(request, username)
return HTTPFound(location = '/index/',
headers =headers)
else:
print "error"
Run Code Online (Sandbox Code Playgroud)
以上使系统记住将使用的用户名security.py
.下面,我使用它来获取用户所在的组.
from .models import (
DBSession,
Users,
)
def groupfinder(userid, request):
session = DBSession()
for instance in session.query(Users).filter(Users.username==userid):
group = 'group:'+instance.group
lsth = {'userid':[group]}
return lsth.get ('userid')
Run Code Online (Sandbox Code Playgroud)
这是使用金字塔授权的最佳方式吗?
据我了解,有两种方法可以安装Express.js.
npm install express
- 来自package.json或通过命令行.此方法将在node_modules文件夹中本地安装express.npm install express -g
.此方法在您的计算机上全局安装程序包.我只是想知道使用这两种方法的好处是什么.是否一个被认为是"最佳实践"而另一个?
我正在创建一个Django应用程序,它对上传的文件进行各种长计算.我不想让用户等待处理文件 - 我只是想向用户显示一个页面,读取的内容类似于"正在解析文件".
如何从视图中进行异步函数调用?
可能看起来像这样的东西:
def view(request):
...
if form.is_valid():
form.save()
async_call(handle_file)
return render_to_response(...)
Run Code Online (Sandbox Code Playgroud) 我有这种形式,我在Chrome和FF中完美呈现,但在IE中,完全不对齐.
应该是什么样的:
图片:
HTML:
<!--image upload bit-->
<div class="portlet-content">
<div class="logoInfo">
<h3><strong>Large Logo</strong></h3>
<p>Width: 160px, Height: 20px | image will be resized automatically</p>
</div>
<div class="imageUploadLogo noLogo"><img id="agencyLogo" src="images/logo_silhouette.png" width="170px" height="32px"></div>
<a href="helper/uploadpic.php?lightbox[width]=360&lightbox[height]=140&lightbox[iframe]=1" class="lightbox"><div id="logo_uploada">Upload</div></a>
</div>
<div class="clearfix"></div>
<hr></hr>
<!--//image upload bit-->
<!--office upload bit-->
<div class="portlet-content">
<div class="logoInfo">
<h3><strong>Office Image</strong></h3>
<p>Width: 160px, Height: 120px | image will be resized automatically</p>
</div>
<div class="imageUploadPhoto noPhoto"><img id="agencyLogo" src="images/office_silhouette.png" width="160px" height="120px"></div>
<a href="helper/uploadpic.php?lightbox[width]=360&lightbox[height]=140&lightbox[iframe]=1" class="lightbox"><div id="logo_uploada">Upload</div></a>
<div class="extraInfo">
<h3><strong>Photo of your office</strong></h3>
<p>Image …
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个测试数据库,它是预先存在的数据库的副本.我正在使用Django模型(理论上与原始数据库一起使用的模型)来执行此操作.我最近继承了其他人的代码,并试图弄清楚代码到底发生了什么.
在模型中,表中的一个表有两列标识为主键.
column1 = models.IntegerField(primary_key = True)
column2 = models.IntegerField(primary_key = True)
column3 = models.CharField(max_length = 30)
Run Code Online (Sandbox Code Playgroud)
当我尝试将此模型同步到测试数据库时 - 发生错误:
文件"/somePathHere/MySQLdb/connections.py",第36行,在defaulterrorhandler中引发错误类,errorvalue _mysql_exceptions.OperationalError:(1068,'多个主键定义')
它是在django文档中写的,Django不允许多个主键.但是,看看DESCRIBE [tablename]
原始MySQL数据库中的输出,看起来这正是这里发生的事情:
+------------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------+------+-----+---------+-------+
| IDENTIFIER | bigint(20) | NO | PRI | NULL | |
| TIMESTAMP_ | bigint(20) | NO | PRI | NULL | |
| VALUE_ | longtext | YES | | NULL | |
+------------+------------+------+-----+---------+-------+
Run Code Online (Sandbox Code Playgroud)
请注意,IDENTIFIER和TIMESTAMP_都列为主键. …
我对缓冲区有所了解,但我不确定如何浏览窗口?我使用Ack插件和NERDTree.如果我在打开NERDTree窗口和主编码窗口的同时在Ack中搜索某些内容,我该如何在这三个不同的窗口之间切换?
偶尔,我不小心打开一个接管NERDTree窗口的文件,所以现在我有两个带代码的窗口和一个Ack窗口.然后我必须关闭我打开的缓冲区,最后关闭窗口,然后重新打开NERDTree.