使用 RSpec 和 Rails 测试带参数的方法调用
Testing a method call with arguments using RSpec and Rails
我有这个 Rails API 并且我正在尝试在我的控制器中测试两个动作。第一个应该调用第二个。我如何使用 RSpec 执行此操作?
这些是操作:
def method1
(...)
method2(@example_var)
end
def method2(id)
(...)
end
到目前为止,我已经试过了,没有成功
describe "#method1" do
it "calls the method2 with id" do
Rails::logger.info "Testing METHOD1"
var = Parent.create(FactoryGirl.attributes_for(:valid_attributes))
get :method1, :id => var.id
Parent.should_receive(:method2).with(var.id)
Parent.method2
end
end
有什么帮助吗?
编辑:如果信息不够,我很乐意提供更多。
method2
未在 Parent
上调用。它将在控制器实例上调用
- 调用前应设置期望值
method2
是私有方法吗?如果它是一个动作,你应该重定向到动作而不是调用方法。
但是如果您想在 method2
调用上设置预期,请执行以下操作
describe "#method1" do
it "calls the method2 with id" do
Rails::logger.info "Testing METHOD1"
var = Parent.create(FactoryGirl.attributes_for(:valid_attributes))
@controller.should_receive(:method2).with(var.id)
get :method1, :id => var.id
end
end
这不完全是一个答案,但这是我的意图和解决方案:)希望这可以帮助需要它的人
测试:
describe "GET #method1" do
it "gets a parent by :id and redirect_to #method2" do
Rails::logger.info "Testing METHOD1 with redirect to METHOD2"
vars = Parent.create(FactoryGirl.attributes_for(:valid_params))
expect redirect_to('method2/' + vars.field1 + '/' + vars.field2 + '/' + vars.field3)
end
end
控制器:
def close
(...)
redirect_to :controller => 'Parents', :action => 'method2', :field1 => @parent[:field1], :field2 => @parent[:field2], :field3 => @parent[:field3]
end
我有这个 Rails API 并且我正在尝试在我的控制器中测试两个动作。第一个应该调用第二个。我如何使用 RSpec 执行此操作?
这些是操作:
def method1
(...)
method2(@example_var)
end
def method2(id)
(...)
end
到目前为止,我已经试过了,没有成功
describe "#method1" do
it "calls the method2 with id" do
Rails::logger.info "Testing METHOD1"
var = Parent.create(FactoryGirl.attributes_for(:valid_attributes))
get :method1, :id => var.id
Parent.should_receive(:method2).with(var.id)
Parent.method2
end
end
有什么帮助吗?
编辑:如果信息不够,我很乐意提供更多。
method2
未在Parent
上调用。它将在控制器实例上调用- 调用前应设置期望值
method2
是私有方法吗?如果它是一个动作,你应该重定向到动作而不是调用方法。
但是如果您想在 method2
调用上设置预期,请执行以下操作
describe "#method1" do
it "calls the method2 with id" do
Rails::logger.info "Testing METHOD1"
var = Parent.create(FactoryGirl.attributes_for(:valid_attributes))
@controller.should_receive(:method2).with(var.id)
get :method1, :id => var.id
end
end
这不完全是一个答案,但这是我的意图和解决方案:)希望这可以帮助需要它的人
测试:
describe "GET #method1" do
it "gets a parent by :id and redirect_to #method2" do
Rails::logger.info "Testing METHOD1 with redirect to METHOD2"
vars = Parent.create(FactoryGirl.attributes_for(:valid_params))
expect redirect_to('method2/' + vars.field1 + '/' + vars.field2 + '/' + vars.field3)
end
end
控制器:
def close
(...)
redirect_to :controller => 'Parents', :action => 'method2', :field1 => @parent[:field1], :field2 => @parent[:field2], :field3 => @parent[:field3]
end