Inn*_*cer 15 ruby ruby-on-rails mocha.js
我有一个Rails控制器动作来测试.在那个动作中,一个方法User.can?使用不同的参数多次调用.在其中一个测试用例中,我想确保调用User.can?('withdraw').但是我不关心User.can的调用?与其他参数.
def action_to_be_tested
...
@user.can?('withdraw')
...
@user.can?('deposit')
...
end
Run Code Online (Sandbox Code Playgroud)
我在下面尝试了测试:
User.any_instance.expects(:can?).with('withdraw').at_least_once.returns(true)
Run Code Online (Sandbox Code Playgroud)
但测试失败,并显示消息指示User.can的意外调用?('deposit').如果我用参数'deposit'添加另一个期望值,则测试通过.但我想知道是否有任何方法,我可以专注于'withdraw'参数调用(因为其他调用与此测试用例无关).
Eri*_*all 17
您可以传递一个块with并让该块检查参数.使用它,您可以构建预期调用的列表:
invocations = ['withdraw', 'deposit']
User.any_instance.expects(:can?).at_most(2).with do |permission|
permission == invocations.shift
end
Run Code Online (Sandbox Code Playgroud)
每次can?调用时,Mocha将屈服于该块.该块将从预期调用列表中提取下一个值,并根据实际调用进行检查.
Inn*_*cer 16
我刚刚找到了一个解决方法,通过使用不相关的参数来调用调用:
User.any_instance.expects(:can?).with('withdraw').at_least_once.returns(true)
User.any_instance.stubs(:can?).with(Not(equals('withdraw')))
Run Code Online (Sandbox Code Playgroud)
http://mocha.rubyforge.org/classes/Mocha/ParameterMatchers.html#M000023
| 归档时间: |
|
| 查看次数: |
6684 次 |
| 最近记录: |