Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在RSpec中将一种方法的输出传递给另一种方法?_Rspec - Fatal编程技术网

如何在RSpec中将一种方法的输出传递给另一种方法?

如何在RSpec中将一种方法的输出传递给另一种方法?,rspec,Rspec,我有一个名为db_conn.rb的类,其中有2个方法 1.一种方法是检查是否建立了db连接,称为is\u conn? 2.另一个是关闭db连接,即关闭\u conn 现在我想为close\u conn编写rspec。我的逻辑是运行close\u conn,然后调用is\u conn?检查布尔值,该值应为false 下面是我的规范文件。我需要更多的指导来实现这一目标 describe DdModule::DbConnn do before(:context) { puts "

我有一个名为db_conn.rb的类,其中有2个方法 1.一种方法是检查是否建立了db连接,称为
is\u conn?
2.另一个是关闭db连接,即
关闭\u conn

现在我想为
close\u conn
编写
rspec
。我的逻辑是运行
close\u conn
,然后调用
is\u conn?
检查布尔值,该值应为
false

下面是我的规范文件。我需要更多的指导来实现这一目标

describe DdModule::DbConnn do
   before(:context) { 
       puts "Testing DB connection..."
       @obj = DbModule::DbConn.new("hostname", "instance", "port", "user", "pass")
    }


it "connect_db constructor takes five parameters and returns true if connection establishes" do
    expect(@obj.is_conn?).to eq true
end

it "connect_db close_connection should close the connection and is_connection should return false" do
    @obj.close_conn
    expect(@db_obj.is_conn?).to eq false
end
我看到以下结果:

rspec
Testing DB connection...
Oracle Connection user@jdbc:oracle:thin:@host:1521/instance initialized..
.FFF

Failures:

1) DbModule::DbConn close_connection should close the connection and is_conn should return false
 Failure/Error: expect(@obj.is_conn?).to eq false

   expected: false
        got: true

   (compared using ==)
 # ./spec/conn_db_spec.rb:21:in `(root)'
Finished in 0.2 seconds (files took 0.27 seconds to load)
2 examples, 1 failures

如果它是一个实例方法,您希望用另一个实例方法更改它,那么您需要像这样编写您的期望(我在本地创建了一个测试类以确保它工作)

如果是我,我会这样写完整的规范

describe DdModule::DbConnn do
  let!(:db_conn) do 
    DbModule::DbConn.new("hostname", "instance", "port", "user", "pass")
  end

  describe '#close_conn' do
    it 'closes the db connection' do    
      expect {db_conn.close_conn}.to change(db_conn, :is_conn?).from(true).to(false)
    end
  end
end

您是否有意在:context之前使用
,而不是在:example
之前使用
?什么是@db_obj?你不是说“obj”吗?米莱斯坦尼德,非常感谢你提供的细节。我试图包括您建议的
expect
行。现在我看到了以下错误消息:
失败/错误:expect(@db_obj.close_connection)。要更改(db_obj,:is_connection?)。从(true).更改为(false)
expected#is_connection?从“真”变为“假”,但没有被阻止。
因为你把我说的两件事混在一起了。我把
expect{db\u conn.close\u conn}放到
not
expect(@db\u obj.close\u connection).to
describe DdModule::DbConnn do
  let!(:db_conn) do 
    DbModule::DbConn.new("hostname", "instance", "port", "user", "pass")
  end

  describe '#close_conn' do
    it 'closes the db connection' do    
      expect {db_conn.close_conn}.to change(db_conn, :is_conn?).from(true).to(false)
    end
  end
end