小编Jim*_*art的帖子

使用Vimrunner对Vim脚本本地函数进行单元测试

我正在使用Vimrunner对Vim插件进行单元测试.一切正常,但我正在寻找一种更好/规范的方式来执行脚本本地功能.由于它们在脚本外部不是直接可见的,因此我现在公开脚本<SID>并将其添加到我的调用中以便运行它们.

我必须将此代码添加到我的插件中以公开SID:

function! s:SID()
  let fullname = expand("<sfile>")
  return matchstr(fullname, '<SNR>\d\+_')
endfunction
let g:my_plugin_SID = s:SID()
Run Code Online (Sandbox Code Playgroud)

这将使SID暴露为例如<SNR>18_.由于Vim函数都是全局函数,并且只是名称,因此可以通过在SID前面为脚本调用脚本本地函数:

:call <SNR>18_some_function()
Run Code Online (Sandbox Code Playgroud)

然后我在一个规范中这样做:

describe "s:reverse_string" do
  let!(:sid) { VIM.command("echo g:my_plugin_SID") }

  def reverse_string(string)
    VIM.command("echo #{sid}reverse_string('#{string}')")
  end

  it "does something" do
    reverse_string("foo").should == "oof"
  end
end
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?

vim unit-testing vimrunner

6
推荐指数
1
解决办法
797
查看次数

ftp,病原体和ftplugin文件的加载顺序

我已经使用Vim和病原体一段时间了,事情进展顺利,但最近我开始使用我的ftplugin配置加载订单问题.

我现在遇到的具体问题是python-mode覆盖了我的ftplugin设置.我有一个~/.vim/ftplugin/python.vim包含以下行:

setlocal textwidth=119
Run Code Online (Sandbox Code Playgroud)

python-mode附带了自己的ftplugin文件,该文件也设置textwidth~/.vim/bundle/python-mode/ftplugin/python/pymode.vim.

问题是Vim现在正在我的ftplugin文件之后加载python-mode的ftplugin文件,所以我最终得到了它textwidth=79.我最近不得不重新安装MacPorts,我认为库存配置必须改变.

我尝试了各种技巧,包括在调用病原体之前关闭文件类型/插件检测,根据其他各种 答案,但没有一个能帮助.

通过使用verbose set textwidth?和一些echomsg调试,我知道两个ftplugin文件都被调用,并且它们被错误地调用(根据我的需要).

有没有办法迫使Vim/pathogen在插件之后调用我的ftplugin文件?

我甚至尝试将我的设置放入~/.vim/after/plugin/pymode.vim,但是在病原体设置插件后立即加载,所以它仍然在ftplugin文件之前运行,只有在我编辑Python文件后才会加载.

vim python-mode pathogen

6
推荐指数
2
解决办法
2029
查看次数

WTForms-JSON 与使用 FormField 的可选嵌套

我正在使用WTForms-JSON并处理嵌套表单。我想让内部表单可选,但如果存在内部表单,我希望它的字段是必需的。我遇到的问题是FormField不接受验证器。

(虽然我使用的是 WTForms-JSON,但我相信这也适用于 vanilla WTForms。)

这段代码有效,但不符合我想要的方式:

class InnerForm(Form):
    foo_id = IntegerField("Foo ID", [Required()])

class OuterForm(Form):
    inner = FormField(InnerForm)
Run Code Online (Sandbox Code Playgroud)

上面代码的问题inner是隐式需要。奇怪的是,虽然validate()回报率Falseinner被省略了,errors是空的。

此代码不起作用:

class InnerForm(Form):
    foo_id = IntegerField("Foo ID", [Required()])

class OuterForm(Form):
    inner = FormField(InnerForm, "Inner", [Optional()])
Run Code Online (Sandbox Code Playgroud)

后者产生此错误:

TypeError: FormField does not accept any validators. Instead, define them on the enclosed form.
Run Code Online (Sandbox Code Playgroud)

我的问题是:我怎样才能使inner可选,但foo_id如果inner存在则需要?

wtforms wtforms-json

5
推荐指数
1
解决办法
2152
查看次数

vim quickfix避免缓冲区更改

我使用的是vimgrepcw开在搜索结果中quickfix的缓冲区.每次我在quickFix列表中选择一行时,光标都会转移到新的文件缓冲区.如何避免这种情况并将光标始终保留在quickFix列表中?

vim

5
推荐指数
1
解决办法
284
查看次数

使用 Karma 和 Webpack 仅运行单个更改的测试文件

我有一个可用的 Karma 设置,使用 Webpack。每当我修改测试文件或其任何依赖项时,所有测试都会运行。这一切都很好,但我真的很喜欢它只运行最少数量的测试。如果我更改测试文件,它应该只运行该测试文件。如果我更改源文件,它应该运行任何具有该源文件作为依赖项的测试文件(通过require)。

这是我的相关部分karma.config.js

files: [
  {
    pattern: '**/*.test.js',
    watched: true,
    included: true,
    served: true
  },
],

preprocessors: {
  '**/*.test.js': ['webpack']
},

webpack: {
  resolve: {
    root: path.join(__dirname, '..', 'webpack'),
    extensions: ['', '.js', '.jsx'],
  },

  module: {
    loaders: [
      {
        test: /.jsx?$/,
        loader: 'babel-loader',
        exclude: [/node_modules/],
        query: {
          presets: ['es2015', 'react']
        }
      },
    ]
  },
},
Run Code Online (Sandbox Code Playgroud)

完整的karma.config.js文件在 gist 中

我熟悉其他问题中提到的解决方案,包括process.env.npm_config_single_file,但这不是我想要做的。

根据我上面的配置,我希望它将每个文件作为单独的 webpack 处理,这也由 …

karma-runner

5
推荐指数
1
解决办法
2528
查看次数

在与另一个脚本相同的行上定义shell脚本变量

我遇到了ksh脚本中的行,这些脚本声明了一个变量并在同一行上提供了另一个shell脚本.例如:

MYVARIABLE="abc" . ~core/script.sh
Run Code Online (Sandbox Code Playgroud)

这是否会产生与单独声明它们不同的行为?例如:

MYVARIABLE="abc"
. ~core/script.sh
Run Code Online (Sandbox Code Playgroud)

unix shell ksh

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

将x元素移到数组的末尾

我试图找到一种方法来采取特定的关系,并将其移动到数组的末尾。基本上,我有一个current_account,我想使用此帐户并将其移到帐户关系数组的末尾,这样当我在关系上进行迭代时,它将最后显示。我想建立一个范围并在可能的情况下使用SQL,这是我的尝试,但实际上并没有得到任何帮助。

的HTML

<% current_user.accounts.current_sort(current_account).each do |account| %>
   <li><%= link_to account.name, switch_account_accounts_path(account_id: account.id) %></li>
<% end %>
Run Code Online (Sandbox Code Playgroud)

当前返回一个由created_at帐户排序的列表。我不希望它在创建时被排序,而是current_account在最底部,所以我创建了一个作用域,current_sort但不确定在这里做什么。

CURRENT_SORT帐户的范围

 scope :current_sort, lambda { |account|

 }
Run Code Online (Sandbox Code Playgroud)

我希望该范围返回关联数组中最后一个传入的帐户。如何使用SQL或Ruby做到这一点?

ruby arrays arel

4
推荐指数
2
解决办法
871
查看次数

Pyapns Fault 500:'无法连接到APNS服务器

我正在尝试让我的django应用程序向运行此服务的iOS应用程序的iOS设备发送推送通知.我正在尝试使用pyapns发送通知.但我无法连接到Apple推送通知服务器.

这项服务大部分已经完成,这是我在退出测试版之前想要开始工作的最后一件事.您可以访问http://pagemove.se/阅读有关该应用程序的信息.

这是日志:

Traceback (most recent call last): File "", line 1, in File "/usr/local/lib/python2.7/dist-packages/pyapns/client.py", line 75, in wrapper return func(*a, **kw) File "/usr/local/lib/python2.7/dist-packages/pyapns/client.py", line 67, in wrapper return func(*a, **kw) File "/usr/local/lib/python2.7/dist-packages/pyapns/client.py", line 97, in notify return _xmlrpc_thread(*f_args) File "/usr/local/lib/python2.7/dist-packages/pyapns/client.py", line 127, in _xmlrpc_thread errback(e) File "/usr/local/lib/python2.7/dist-packages/pyapns/client.py", line 65, in errback_wrapper errback(e) # not an instance of UnknownAppID - nothing we can do here File "/usr/local/lib/python2.7/dist-packages/pyapns/client.py", line 55, in errback raise e xmlrpclib.Fault:

有人有这个问题吗?与.pem文件可以是一回事吗?或者ubuntu-server的设置?我可以忘记在路由器中打开一些端口吗?

编辑 …

python django

3
推荐指数
1
解决办法
2809
查看次数

如何从url下载json文件

我正在解决 mongodb 大学的 mongodb 教程。他们的网站有一个名为“下载作业”的链接。当我单击链接时,没有下载任何内容,而是要下载的 json 文件显示在网址为https://somepath.json的网页上。

我的问题是当你有指向 json 文件的 URL 时如何下载它?

browser

2
推荐指数
1
解决办法
10万
查看次数

在pytest中覆盖子夹具

我正在使用带有一些复杂的依赖注入夹具的pytest。我的灯具在长链中使用其他灯具。我希望能够针对特定测试更改链中间的某些固定装置。

鉴于这些(简化的)装置:

@pytest.fixture
def cache():
    return Cache()

# Use cache fixture in a new fixture.
@pytest.fixture
def resource(cache):
    return Resource(cache=cache, working=True)

# Use resource fixture in a new fixture.
@pytest.fixture
def service(resource):
    return Service(resource=resource)
Run Code Online (Sandbox Code Playgroud)

和一些测试:

def test_service_when_resource_working(service):
    assert service.status == "good"

def test_service_when_resource_broken(service):
    assert service.status == "bad"
Run Code Online (Sandbox Code Playgroud)

如何覆盖resource灯具,使其像这样:

@pytest.fixture
def broken_resource(cache):
    return Resource(cache=cache, working=False)
Run Code Online (Sandbox Code Playgroud)

...但仅适用于test_service_when_resource_broken测试用例?我可以创建一个broken_serviceusing broken_resource,但是现实是依赖链很长,我想重用所有的固定装置,但是有选择地在中间为某些选定的测试更改它们。

我想做这样的事情(伪代码):

@pytest.override_fixture('resource', 'broken_resource')
def test_service_when_resource_broken(service):
    # service should have been instantiated with broken_resource instead of resource.
    assert …
Run Code Online (Sandbox Code Playgroud)

python pytest

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