我有以下代码来测试控制器的动作创建
let(:custom_action) { create :custom_action, entity: entity }
Describe '#create' do
context 'with valid attributes' do
before { allow(controller).to receive(:custom_actions_path).and_return('/') }
subject { post :create, params: { custom_action: {
name: custom_action.name,
label: custom_action.label,
url: custom_action.url,
request_method: custom_action.request_method,
entity_id: entity.id
},
locale: user.language }}
it 'should increment resource list by 1' do
expect { subject }.to change { CustomAction.count }.by(1)
end
end
end
运行测试时,我得到:更改为1,但更改为2
我检查了动作,如果创建新对象总是创建一个,而不是两个。
我是否更正了主题?我的考试有什么问题?谢谢
答案 0 :(得分:1)
在您的subject
块中调用expect
会评估subject
块。主题块调用您的操作,但需要对此进行评估custom_action
。最后,在评估块时,您的custom_action
块将创建一个CustomAction
,而您的实际控制器操作将在请求期间再创建一个。
将您的let
更改为let!
,以修复您的测试。