Rspec post :创建 'unknown keyword: '
Rspec post :create 'unknown keyword: '
我是 Rspec 的新手,我正在尝试测试我的控制器方法的基本功能。我知道我不应该测试基本功能,但我这样做更多是出于学习目的,而不是构建某些东西。
我有一个名为 ProtocolsController 的控制器。控制器用于基本的 CRUD 功能。我正在尝试测试控制器的#create 方法。下面是我的#create 控制器:
def create
@protocol = Protocol.new(protocol_params)
if @protocol.save
flash[:notice] = 'New protocol added'
redirect_back(fallback_location: 'test_results#index')
else
flash[:notice] = @protocol.errors[:name]
render 'new'
end
end
为了测试悲伤的路径,我想向控制器传递一个模拟对象,其中包含创建协议实例所需的参数 class。为此,我有以下代码:
describe '#create' do
it 'fails to save because the name already exists' do
params = FactoryGirl.attributes_for(:protocol)
post :create, :protocol => params
end
end
现在我知道测试不完整,但我一次测试一行,当我 运行 Rspec 时,我收到以下错误:
Failure/Error: post :create, :protocol => params
ArgumentError:
unknown keyword: protocol
但是当我将 post 更改为:expect { post :create, :protocol => params }
有效。这让我想到了我的问题:
- 为什么第一个 post (
post :create, :protocol => params
) 失败了?
- 我将如何向控制器发送模拟对象?
- 为什么 expect 版本有效?
任何对问题的见解将不胜感激。我一直在绞尽脑汁想弄清楚这个问题,我猜这是一个显而易见的答案。
您调用 post
的方式在 Rails 5.
中不再适用
这是上一版本的弃用警告:
ActionController::TestCase HTTP request methods will accept only keyword arguments in future Rails versions.
现在您必须添加 params
键,如下所示:
post :create, params: { protocol: params }
注意 post :create, :params => { :protocol => params }
意思相同,只是语法不同。
我是 Rspec 的新手,我正在尝试测试我的控制器方法的基本功能。我知道我不应该测试基本功能,但我这样做更多是出于学习目的,而不是构建某些东西。
我有一个名为 ProtocolsController 的控制器。控制器用于基本的 CRUD 功能。我正在尝试测试控制器的#create 方法。下面是我的#create 控制器:
def create
@protocol = Protocol.new(protocol_params)
if @protocol.save
flash[:notice] = 'New protocol added'
redirect_back(fallback_location: 'test_results#index')
else
flash[:notice] = @protocol.errors[:name]
render 'new'
end
end
为了测试悲伤的路径,我想向控制器传递一个模拟对象,其中包含创建协议实例所需的参数 class。为此,我有以下代码:
describe '#create' do
it 'fails to save because the name already exists' do
params = FactoryGirl.attributes_for(:protocol)
post :create, :protocol => params
end
end
现在我知道测试不完整,但我一次测试一行,当我 运行 Rspec 时,我收到以下错误:
Failure/Error: post :create, :protocol => params
ArgumentError:
unknown keyword: protocol
但是当我将 post 更改为:expect { post :create, :protocol => params }
有效。这让我想到了我的问题:
- 为什么第一个 post (
post :create, :protocol => params
) 失败了? - 我将如何向控制器发送模拟对象?
- 为什么 expect 版本有效?
任何对问题的见解将不胜感激。我一直在绞尽脑汁想弄清楚这个问题,我猜这是一个显而易见的答案。
您调用 post
的方式在 Rails 5.
这是上一版本的弃用警告:
ActionController::TestCase HTTP request methods will accept only keyword arguments in future Rails versions.
现在您必须添加 params
键,如下所示:
post :create, params: { protocol: params }
注意 post :create, :params => { :protocol => params }
意思相同,只是语法不同。