【发布时间】:2020-06-26 18:32:25
【问题描述】:
换句话说:类修改(在测试中)是否有可能影响生产代码?
(此代码示例使用 Rspec 在 Rails 应用程序中进行测试)
我的控制器示例
在此控制器中创建 ExternalModel。然后调用它的“inscription”方法并将结果分配给一个变量。它将结果用于控制器方法上的其他操作。
class ExampleController < ApplicationController
def callback_page
external_model = ExternalModel.new(argument)
result = external_model.inscription
render_error_json && return unless result['error_desc'].eql? 'OK'
TransactionModel.create(token: result['token'])
end
end
我的规范示例
在规范中我修改了 ExternalModel 以便在调用 .inscription 方法时返回我想要的:
ExternalModel.class_eval {
def inscription(_fake_arguments)
{
'error_desc' => 'OK',
'token' => '1234'
}
end
}
这是整个规范:
RSpec.describe 'Example management', type: :request do
context 'callback_page' do
it 'creates a transaction' do
ExternalModel.class_eval {
def inscription(_fake_arguments)
{
'error_desc' => 'OK',
'token' => '1234'
}
end
}
expect {
post(callback_page_path)
}.to change(TransactionModel.all, :count).by(1)
expect(response).to render_template(:callback_page)
end
end
end
【问题讨论】:
标签: ruby-on-rails testing rspec