2017-05-04 86 views
0

我建立具有结构称为temp_coverage Rails的规范测试,像这样:如何在Rails测试中设置对象属性的方法?

temp_coverage = Struct.new(:paydays) do 
    def calculate_costs 
     50 
    end 
    end 

而在我的天赋,我打电话使用temp_coverage的方法,但我发现了一个错误,因为代码我测试是做以下:

temp_coverage.req_subscriber_election_amount = subscriber_election_amount 

而且我得到一个错误:

NoMethodError: undefined method `req_subscriber_election_amount=' for < struct paydays=12 >

我怎样才能踩灭了属性的设置在一个结构我的规格?

回答

1

就是这样你要找的东西?

temp_coverage = double('temp_coverage', paydays: nil) 

allow(temp_coverage).to receive(:calculate_costs).and_return(50) 
allow(temp_coverage).to receive(:req_subscriber_election_amount=) do |argument| 
    temp_coverage.instance_variable_set(:@req_subscriber_election_amount, argument) 
end 

# Example: 
temp_coverage.req_subscriber_election_amount = 123 
puts temp_coverage.instance_variable_get(:@req_subscriber_election_amount) 
# => 123 
puts temp_coverage.paydays 
# => nil 
puts temp_coverage.calculate_costs 
# => 50 
+0

感谢周杰伦,氩气,这正是我想什么来实现的,但是当我运行规范我m得到一个未定义的方法'allow'。这是一个新的rspec命令? –

+0

哦,我想你使用的是旧的rspec。你的rspec版本> = 3? [旧的RSpec参考](https://www.relishapp.com/rspec/rspec/rspec-mocks/v/2-99/docs/) –

+0

挖掘它看起来像我们正在使用摩卡嘲笑,而不是rspec ... –

0

我找到了一种通过使用命名的Struct来完成此操作的方法。所以一旦我叫我的结构:

temp_coverage = Struct.new('CoverageClass', :paydays) do 
    def calculate_costs 
     50 
    end 
    end 

然后我可以做到以下几点:

Struct::CoverageClass.any_instance.stubs(:req_subscriber_election_amount).returns(25) 
相关问题