ruby – rspec stub允许传递[hash_key]
发布时间:2020-12-16 23:06:06 所属栏目:百科 来源:网络整理
导读:如何创建一个rspec方法存根以允许来自接受哈希键的方法的响应返回其值? 这是我想测试的一行 sub_total = menu.menu_items[item] * quantity 我在rspec中使用这一行作为我的测试存根. allow(menu).to receive(:menu_items[item]).and_return(2.0) 我的环境设
如何创建一个rspec方法存根以允许来自接受哈希键的方法的响应返回其值?
这是我想测试的一行 sub_total = menu.menu_items[item] * quantity 我在rspec中使用这一行作为我的测试存根. allow(menu).to receive(:menu_items[item]).and_return(2.0) 我的环境设置为ruby 2.2.0和规范3.1.7 但是我继续得到一个 NameError: undefined local variable or method `item' Ruby代码 def place_order(item,quantity,menu) sub_total = menu.menu_items[item] * quantity @customer_order << [item,sub_total] end Rspec代码 let(:menu) { double :menu } it "should allow 1 order of beer to placed" do order = Order.new allow(menu).to receive(:menu_items[item]).and_return(2.0) order.place_order(:Beer,1,2.0) expect(order.customer_order).to eq [[:Beer,2.0]] end 失败: 1) Order should allow 1 order of beer to placed Failure/Error: allow(menu).to receive(:menu_items[item]).and_return(2.0) NameError: undefined local variable or method `item' for #<RSpec::ExampleGroups::Order:0x007fbb62917ee8 @__memoized=nil> # ./spec/order_spec.rb:9:in `block (2 levels) in <top (required)>' 我尝试了很多东西,但没有任何效果 allow(menu).to receive(:menu_items).and_return(2.0) allow(menu).to receive(:menu_items).with(item).and_return(2.0) allow(menu).to receive(:menu_items).with("item").and_return(2.0) allow(menu).to receive(:menu_items).with([item]).and_return(2.0) 我在irb中运行我的代码,我可以看到它的工作原理,但我找不到让我的类加倍来接收哈希键的方法. 解决方法
行menu.menu_items [item]实际上由3个方法调用组成. []是对menu_items返回的哈希上方法
[] 的调用.
我假设menu.menu_items返回一个哈希而不是一个数组,在规范项中给出的是一个符号. 这意味着你的存根需要更多的工作. allow(menu).to receive(:menu_items).and_return({ Beer: 2.0 }) 还要注意,错误 undefined local variable or method `item' 是因为您在规范中使用了item,但是在方法之外没有定义item. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |