小编Gau*_*nda的帖子

测试包含ActionController :: Live的控制器

我有一个包含Rails ActionController::Live模块的控制器.我显示一个日志文件,正在使用读取的内容FileTail宝石,并使用SSE来自ActionController::Live像这样:

class LogsController < ApplicationController
  include ActionController::Live

  def live
    response.headers['Content-Type'] = 'text/event-stream'
    sse = SSE.new(response.stream, event: 'queries')
    File.open(logfile_location) do |log|
      log.extend(File::Tail)
      log.interval = 1
      log.backward(10)
      log.tail {|line| sse.write line}
    end
  rescue => e
    Rails.logger.info "Error Message:: #{e.message}"
  ensure
    sse.close
  end
end
Run Code Online (Sandbox Code Playgroud)

我想用它来测试live动作Rspec.这就是我目前拥有的:

before { get :live }
it { expect(response.headers['Content-Type']).to eq("text/event-stream") }
after {response.stream.close unless response.stream.closed? }
Run Code Online (Sandbox Code Playgroud)

如果我没有after适当的线路,规范通过,但它只是继续监听,连接永远不会关闭,因此规格永远不会完成,你必须手动杀死它们.

如果我有这after条线,它有时会通过,但大多数时候它会抛出异常,并且规格失败.

fatal:
   No live threads left. …
Run Code Online (Sandbox Code Playgroud)

ruby rspec ruby-on-rails eventsource

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

获取实例名称

有没有办法在类方法中获取我们为特定类创建的实例的名称?

这就是我想要做的:

module MyObjectStore
  values = {}
  temp=  {}
  define_method :add_check_attribute do |method,*args|
    if method.to_s =~ /=$/
      temp[method[0..-2]] = args[0]
    else
      instance_variable_get("@#{method}")
    end
  end
  define_method :method_missing do |method,*args|
    add_check_attribute(method,*args)
  end
  define_method :save do
    temp.each {|key,value| instance_variable_set("@#{key}",value)}
    values[self] = temp
    end
end

class C
  include MyObjectStore
end

a = C.new
a.id = 1
a.name = 'gaurav'
a.save
Run Code Online (Sandbox Code Playgroud)

在模块的倒数第三行,我试图将对象的值存储到以实例名称为键的新哈希中.

有可能吗?

我现在正在使用self它,但它给出了整个对象,而不是实例名称.

ruby

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

Java - 能够访问静态方法的实例

我刚刚开始使用Java,正在调查这个Nested Classes主题,并尝试了一些东西,突然间,这发生了:

class Encloser
{
  static int i;

  static void m1()
  {
    System.out.println(i);
  }

  static void m2()
  {
    Enclosee.accessEncloser();
  }

  static class Enclosee
  {
    static void accessEncloser()
    {
      i = 1;
      m1();
    }

    static void accessEncloserNew()
    {
      m2();
    }
  }
}

class EncloserTest
{

  public static void main(String[] args)
  {
    Encloser ee = new Encloser();
    Encloser.Enclosee e = new Encloser.Enclosee();
    ee.m1();
    ee.m2();
    e.accessEncloser();
    e.accessEncloserNew();Encloser.m1();
    Encloser.m2();
    Encloser.m1();
    Encloser.Enclosee.accessEncloserNew();
    Encloser.Enclosee.accessEncloser();
  }

}
Run Code Online (Sandbox Code Playgroud)

运行上面的代码不会给出任何错误/异常.它只是运行.这里的困惑是,实例如何能够在Static Methods这里调用?不Static Methods喜欢Class …

java static instance-variables nested-class

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