【发布时间】:2013-08-21 08:50:42
【问题描述】:
我使用 Minitest 和 Mocha 测试我的 Rails 应用程序以进行单元测试和集成测试,并想测试是否使用某些参数调用命令行命令。
说,我有课:
class Provisioning::Backup
def create(path)
system("tar -czf #{path} bar.tar.gz")
end
end
我的测试只有想知道带有这些参数的命令是否运行。而不是它是否使用system() 或它的替代品``。甚至通过resque等。我想测试外部,而不是内部实现。
因此,我对 *test/integration/user_requests_backup_test.rb* 中的当前解决方案不满意:
class UserRequestsBackupTest < ActionDispatch::IntegrationTest
test "requests for a backup runs a backup-script" do
contact = contacts(:harry)
site = contact.sites.first
Provisioning::Backup.expects(:system).with("tar -xzf foo bar")
post "/v1/sites/#{site.id}/backups"
assert_response :success
end
# backup is already pending
# backup fails
end
这可行,但断言实现而不是行为,因为Provisioning::Backup.expects(:system).with("tar -xzf foo bar") 对内部工作假设过多,并且一旦我将其移至例如回复
我还有哪些其他选择?有没有办法模拟或存根并期望 system 在较低级别?是否存在允许以更通用的方式模拟和预期命令的模式或 gem?
【问题讨论】:
标签: ruby command minitest stubbing