ruby-on-rails - rails rspec 模型和 Controller 测试

标签 ruby-on-rails testing rspec

我只是想知道我是否以正确的方式理解测试。

模型测试应该在没有模拟的情况下完成,例如:

规范

model.name = 'test'
model.save
model.should eq('test')

并且 Controller 应该基于模拟:

规范

model.should_receive(:save).and_return(true)

Controller

def action
...
if model.save
...
end

总结: Controller 是在没有任何真实数据的情况下进行测试的。与在...数据库上运行的模型层相比,所有数据都是由 stub 和模拟“提供”的?

但我认为模型也应该被模拟

model.name = 'test'
model.should_receive(:save)
model.should eq('test')

但我没有看到这样的测试意义,因为我没有测试保存方法。

最佳答案

作为一般经验法则,我就是这样做的。

使用您的示例,如果您已经在模型规范中测试了 save 方法,则无需在 Controller 中再次测试它,您只需要知道它已被调用即可。

本质上,您需要测试 Controller 的行为,而不是模型对其的 react 。

关于ruby-on-rails - rails rspec 模型和 Controller 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12788370/

相关文章:

ruby-on-rails - rails : Loading schema into secondary database

testing - 在 TestCafe 中使用标签(Smoke、regression)

testing - 我应该在哪里使用 Monodevelop 在 fsharp 项目中进行测试?

ruby-on-rails - Ruby on Rails - RSpec - 重构 lambda 样式测试

ruby-on-rails - RSpec:检查是否已保存任何模型

ruby-on-rails - 如何使用 aws 弹性负载均衡器将 http 请求强制重定向到旅客独立中的 https?

ruby-on-rails - 获取复选框的值 [Ruby/Sinatra(Rails)]

ruby-on-rails - 如果我安排一个工作人员每天在 Heroku 上运行,我如何确定它不会运行两次或被跳过?

java - 使用 `verify` 显式检查函数调用参数或使用 `when` 隐式检查函数调用参数?

ruby-on-rails - 如何删除单元测试并将其替换为 rspec?