小编Sly*_*Sly的帖子

RSpec:Stubbing SFTP

我试图从一个对象中删除Net :: SFTP.这是模型:

class BatchTask
  require 'net/sftp'

  def get_file_stream(host, username, password, path_to_dir, filename)
    raise ArgumentError if host.nil? or username.nil? or password.nil? or path_to_dir.nil? or filename.nil?
    file_stream = nil
    Net::SFTP.start(host, username, password) do |sftp|
      sftp.dir.glob(path_to_dir, filename) do |entry|
        # Verify the directory contents
        raise RuntimeError(true), "file: #{path_to_dir}/#{filename} not found on SFTP server" if entry.nil?
        file_stream = sftp.file.open("#{path_to_dir}/#{entry.name}")
      end
    end
    file_stream
  end

end
Run Code Online (Sandbox Code Playgroud)

这是规格:

require 'spec_helper'

describe "SftpToServer" do
  let(:ftp) { BatchTask::SftpToServer.new }

 it "should return a file stream" do
    @sftp_mock = …
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails stubbing net-sftp

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

Bundle install在./mysql2文件夹中安装gem

我最近在我的机器上升级了mysql.结果我试图相应地更新我的mysql2 gem.在这样做的过程中,我运行"bundle install",由于某些原因,我的Gemfile中的所有gem都安装在./mysql2目录中?

ruby-1.9.2-p180 [dev]:project.git$ bundle install
NOTE: Gem.source_index is deprecated, use Specification. It will be removed on or after 2011-11-01.
Gem.source_index called from /Users/al/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.10/lib/bundler/shared_helpers.rb:3.
NOTE: Gem.source_index is deprecated, use Specification. It will be removed on or after 2011-11-01.
Gem.source_index called from /Users/al/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.10/lib/bundler/source.rb:162.
NOTE: Gem::SourceIndex#each is deprecated with no replacement. It will be removed on or after 2011-11-01.
Gem::SourceIndex#each called from /Users/al/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.10/lib/bundler/source.rb:162.
NOTE: Gem.source_index is deprecated, use Specification. It will be removed on or after 2011-11-01.
Gem.source_index called from /Users/al/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.10/lib/bundler/source.rb:162. …
Run Code Online (Sandbox Code Playgroud)

rubygems ruby-on-rails bundler mysql2

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

RSpec:方法内部对外部对象的存根方法调用

我试图在方法中存根方法的行为:

class A
  def method_one(an_argument)
  begin
    external_obj = ExternalThing.new
    result = external_obj.ext_method(an_argument)
  rescue Exception => e
    logger.info(e.message)
  end
  end
end
Run Code Online (Sandbox Code Playgroud)

规格:

it "should raise an Exception when passed a bad argument" do
  a = A.new
  external_mock = mock('external_obj')
  external_mock.stub(:ext_method).and_raise(Exception)
  expect { a.method_one("bad") }.to raise_exception
end
Run Code Online (Sandbox Code Playgroud)

但是,永远不会引发异常。

我也试过:

it "should raise an Exception when passed a bad argument" do
  a = A.new
  a.stub(:ext_method).and_raise(Exception)
  expect { a.method_one("bad") }.to raise_exception
end
Run Code Online (Sandbox Code Playgroud)

这也不起作用。在这种情况下,如何正确存根外部方法以强制异常?

提前感谢您的任何想法!

rspec mocking stub

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

无法在Mac OSX 10.6上停止Mysql 5.1

我试图在MacOSX 10.6上停止Mysql v5.1,这样我就可以升级到Mysql v5.5.

我相信我在几个月前从源代码安装了v5.1.我尝试了这里列出的所有方法:如何在Mac OS安装上停止MySQL?.

但是,当我执行"mysqladmin shutdown"时,它似乎只会生成另一个mysql进程:

$ sudo mysqladmin shutdown
$ ps -Af | grep mysql
   74 53283     1   0   0:00.01 ??         0:00.01 /bin/sh /usr/local/mysql/bin/mysqld_safe
   74 53324 53283   0   0:00.01 ??         0:00.03 /usr/local/mysql/libexec/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var --log-error=/usr/local/mysql/var/Al.local.err --pid-file=/usr/local/mysql/var/Al.local.pid
  501 53343 52577   0   0:00.00 ttys003    0:00.00 grep mysql
Run Code Online (Sandbox Code Playgroud)

如果我试图杀死这个过程,也会发生同样的事情.(但是,如果我试图杀死mysqld_safe进程,我会得到"没有这样的过程")

我查看了/ Library/StartupItems并且没有MySQL目录.我知道我没有使用MacPorts来安装Mysql.

我在这里错过了什么?我该如何杀死这头野兽?

mysql macos shutdown

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

使用Rspec对File.open进行存根

我正在尝试存根File.open以测试我读取CSV文件的方法.

这是模型:

class BatchTask
  def import(filename)
    CSV.read(filename, :row_sep => "\r", :col_sep => ",")
  end
end
Run Code Online (Sandbox Code Playgroud)

这是规范代码:

let(:data) { "title\tsurname\tfirstname\rtitle2\tsurname2\tfirstname2\r"}
let(:result) {[["title","surname","firstname"],["title2","surname2","firstname2"]] }

it "should parse file contents and return a result" do
  File.stub(:open).with("file_name","rb") { StringIO.new(data) }
  person.import("file_name").should == result
end
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试这样做时,我得到(stacktrace):

Errno::ENOENT in 'BatchTask should parse file contents and return a result'
No such file or directory - file_name
/Users/me/app/models/batch_task.rb:4:in `import'
./spec/models/batch_task_spec.rb:10:

Finished in 0.006032 seconds
Run Code Online (Sandbox Code Playgroud)

我一直在撞击这个,无法弄清楚我做错了什么.任何帮助将不胜感激!

rspec ruby-on-rails stubbing

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

Rails:在模型中指定不同的数据库

我正在尝试设置Rails(v3.2.2)以使用多个数据库.我这是基于这个连接Rails 3.1与多个数据库.

我的模特:

class Category < ActiveRecord::Base                                                                                                                                                                                                                                                                                                
  establish_connection :category_database                                                                                                                                                                                                                                                                                                                       
  self.primary_key = "cat_id"                                                                                                                                                   

  validates_presence_of :name, :display_name, :description, :icon, :image, :parent_category_id, :create_time                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
end
Run Code Online (Sandbox Code Playgroud)

database.yml的:

category_database:                                                                                                                                                              
  adapter: mysql2                                                                                                                                                               
  encoding: utf8                                                                                                                                                                
  reconnect: false                                                                                                                                                              
  database: main_cat                                                                                                                                                         
  pool: 5                                                                                                                                                                       
  username: root                                                                                                                                                                
  password: blah                                                                                                                                                                    
  socket: /var/run/mysqld/mysqld.sock
Run Code Online (Sandbox Code Playgroud)

当我运行此spec文件时:

require 'spec_helper'                                                                                                                                                           

describe Category do                                                                                                                                                            
  puts "ENV: #{Rails.env}"                                                                                                                                                      
  it { should validate_presence_of :name }                                                                                                                                      
  it { should validate_presence_of :display_name }                                                                                                                              
  it { should validate_presence_of :description }                                                                                                                               
  it { should validate_presence_of :icon }                                                                                                                                      
  it { should validate_presence_of :image } …
Run Code Online (Sandbox Code Playgroud)

mysql activerecord ruby-on-rails-3

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