我正在尝试将ESLint linter与Jest测试框架一起使用.
Jest测试用一些全局变量运行jest,我需要告诉linter; 但是棘手的是目录结构,使用Jest测试嵌入了__tests__文件夹中的源代码,因此目录结构类似于:
src
foo
foo.js
__tests__
fooTest.js
bar
bar.js
__tests__
barTest.js
Run Code Online (Sandbox Code Playgroud)
通常情况下,我在单个目录下进行所有测试,我可以在.eslintrc那里添加一个文件来添加全局...但我当然不想.eslintrc在每个__test__目录中添加一个文件.
现在,我刚刚将测试全局变量添加到全局.eslintrc文件中,但由于这意味着我现在可以jest在非测试代码中引用,这似乎不是"正确"的解决方案.
有没有办法让eslint基于某些基于目录名称的模式应用规则,或类似的东西?
所以我正在研究Python中的一个项目,并试图通过pylint来保持它的标准.所以,我有一个源文件,(我们只称它为a.py)
#a.py
import loggingsetup
def foo():
log.info("This is a log message")
Run Code Online (Sandbox Code Playgroud)
但是,我想控制日志记录的样子,所以在loggingsetup中我有类似的东西:
#loggingsetup.py
import logging
logging.root.setLevel(logging.DEBUG)
consoleOut = logging.StreamHandler()
consoleOut.setLevel(logging.INFO)
consoleOut.setFormatter(logging.Formatter("\t"+logging.BASIC_FORMAT))
logging.root.addHandler(consoleOut)
#etc
Run Code Online (Sandbox Code Playgroud)
现在,这似乎工作正常.我想,作为一个初步的问题,我应该问,如果这是去了解这个正确的方式,或者如果有构建我的代码以不同的方式,这将是优选的.
但我的主要问题是,当我在a.py上运行pylint时,我收到类似"未使用的import - import loggingsetup"的警告,因为我实际上并没有从loggingsetup调用任何方法或函数.
我可以做一些事情,比如重新定义loggingsetup的主体作为一个函数并调用它,但它看起来很傻和容易出错(如果我从其他地方导入loggingsetup,我不得不担心调用它两次,如果我理解了python处理导入,这不是我当前设置的问题).
我显然可以告诉pylint忽略警告,但我想我先问这里,以确保这实际上不是我应该处理的事情.
我使用的NodeJS与jsonpath.我有这个json结构:
{
things:{
books: [
{name: "book1"},
{name: "book2"},
{name: "book3"},
{name: "book4"},
],
movies: [
{name: "movie1"},
{name: "movie2"},
{name: "movie3"},
{name: "movie4"},
]
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道jsonpath表达式返回一个带有things对象键名的数组.那将是:
["books","movies"]
Run Code Online (Sandbox Code Playgroud)
现在,我这样做:
Object.keys(jsonpath.eval(jsonStructure,"$.things").pop());
Run Code Online (Sandbox Code Playgroud)
但我发现它并不优雅......当我只需要键名时,我不需要复制整个结构.
根据官方 React 文档,componentDidMount在 hooks 中翻译为:
useEffect(() => {
//code here
},[])
Run Code Online (Sandbox Code Playgroud)
所以假设我想在这个钩子中做一个 api 调用:
useEffect(() => {
getActiveUser();
},[])
Run Code Online (Sandbox Code Playgroud)
添加 eslint 规则后"react-hooks/exhaustive-deps",这是一个 lint 错误。为了使其静音,我可以将getActiveUser函数放入数组中,一切正常。
但这是否与文档背道而驰?我的印象是数组检查道具更改。我还想指出 API 调用是在没有 prop/id 的情况下进行的,所以我可以理解必须做这样的事情的事实:
useEffect(() => {
getActiveUser(someId);
},[getActiveUser, someId])
Run Code Online (Sandbox Code Playgroud)
那么这里发生了什么?加了Eslint规则,是不是Effect里面的数组不能再为空了?
我被问到这是一个编码测试,但不知道答案.有人有主意吗?
所述结构化的克隆算法是使用的,除其他事物的序列化算法,通过传递窗口之间的数据window.postMessage。它支持递归对象(与 JSON 不同),但不支持 DOM 节点、函数和错误等
我想要的是一种检查给定对象是否可以通过结构化克隆算法序列化的简单方法。我可以递归遍历对象并检查每个属性是 DOM 节点、函数还是错误,但这不是一个完整的答案,我想知道是否有更好的方法。
我正在尝试对当前的python程序非常注意pylint警告,因此尽管我意识到可以简单地关闭警告,但我想确保在此之前没有更理想的解决方案。
我当前的代码部分是我的日志记录代码。我有一个init()设置处理程序并将其附加到根记录器的函数,以及一个set_console_level(level)设置报告控制台消息的级别(DEBUG,INFO等)的函数:
_CONSOLE_OUT = NONE
def init():
"""Set up the error handlers for the root logger"""
console_out = logging.StreamHandler()
console_out.setLevel(logging.INFO) #Show info messages for now
#...
logging.root.addHandler(console_out)
global _CONSOLE_OUT
_CONSOLE_OUT = console_out
#Rest of function sets up more handlers similarly
init()
def set_console_level(level):
"""Change the level at which console messages are printed"""
assert __CONSOLE_OUT is not None #Set in init
_CONSOLE_OUT.setLevel(level)
Run Code Online (Sandbox Code Playgroud)
据我的阅读所知,这就是做到这一点的方法。global _CONSOLE_OUT需要该行才能写入模块级变量。但是,当我对该文件运行pylint时,会收到警告W: 15,4:init: Using the global statement。有办法避免这种警告吗?解决此问题的更好方法?
(请不要说出global _CONSOLE_OUT #pylint: …
我正在使用Node.js并表达.假设我有一对玉文件:
template.jade
html
body
block page-content
Run Code Online (Sandbox Code Playgroud)
example.jade
extends template
block page-content
p
| Lorem ipsum yadda yadda
Run Code Online (Sandbox Code Playgroud)
如果我渲染example.jade,我会得到将该段落标记插入template.jade的body标签的结果,这通常是我想要的.
我的问题是我正在尝试使用pushState和History API来加载这些文件(好吧,显然不是这些文件),当这样做时,我想要一个只返回页面内容块内容的请求本身,没有完整的html文档的其余部分.有没有一种简单的方法可以告诉Jade只是渲染块本身而不是将其嵌入到模板中?
我能想到的最好的就是改变它:
example.jade
extends template
block page-content
import example-content
Run Code Online (Sandbox Code Playgroud)
例如-content.jade
p
| Lorem ipsum yadda yadda
Run Code Online (Sandbox Code Playgroud)
但是创建像这样的额外文件似乎很苛刻.
我正在尝试使用在淘汰版本3中引入的checkedValue绑定,使用单选按钮,但我没有得到我期望的行为.
这是一个例子:( viewModel有两个属性; list是一个数组; checkedVal是一个可观察的)
<div data-bind="foreach:list">
<input type="radio" data-bind="
checkedValue: {
data: $data,
index: $index(),
},
checked: $parent.checkedVal
"/>
<span data-bind="text: $data"></span>
</div>
Run Code Online (Sandbox Code Playgroud)
我希望单选按钮行为正常,并且checkedVal是包含数据和索引的对象.checkedVal是我所期望的,但单选按钮不会选择.奇怪的是,在我的实际代码中,行为是不一致的; 有时无线电按钮可以工作,有时却没有,但据我所知,它一直不适用于小提琴.
这是一个错误,还是我误解了它应该如何工作?
我正在考虑使用firebase作为Web应用程序用户数据的数据存储.我目前的想法是使用他们加入的时间戳作为引用该用户数据的密钥来存储每个用户的数据.这种方案的优点在于它是一种为用户分配唯一整数ID的简单方法,并且可以简化用户的时间顺序排序.
然而,缺点是如果两个"添加用户"请求被提交相同的数据,应用程序将很乐意添加两个单独的条目,这是不理想的.我可以随意乱扔东西(我开始认为我应该使用电子邮件作为密钥并通过连接数据优先考虑,而不是我当前的方案),但我想我不想这样做.有没有办法防止重复数据?
天真的方法可能只是做以下事情:
if(!searchFirebaseForUser(data)) {
addUser(data);
}
Run Code Online (Sandbox Code Playgroud)
但这绝对是一种竞争条件; 两个请求都很容易查询并在数据库中找不到用户,并且都添加.我想在一个交易中执行此操作,但似乎Firebase事务支持不包括这种情况.有办法处理这个吗?
javascript ×5
python ×3
eslint ×2
node.js ×2
pylint ×2
warnings ×2
atomic ×1
express ×1
firebase ×1
jestjs ×1
json ×1
jsonpath ×1
knockout.js ×1
pug ×1
react-hooks ×1
reactjs ×1
sequence ×1
slice ×1
templates ×1
transactions ×1