0

我想编写如下测试:

account = Account.find(1)
@controller.should_receive(:authorize!).with(:create, instance_of(User, :account_id => account.id))

(在我的控制器上测试cancan gem 的确切示例)

我知道这部分:account_id => account.id是无效的。

我的问题在这里:

如何调用instance_of但同时测试实例的属性以具有特定值?

我希望这很清楚。否则,让我知道,我怎样才能让它更清楚。

提前致谢

帕纳约蒂斯

4

3 回答 3

1

你想测试什么?控制器加载正确的实例并将正确的实例传递给:authorize!?如果是,那么类似:

Account.should_receive(:find).returns(account))
@controller.should_receive(:authorize!).with(account)

会做这项工作

于 2012-08-20T11:24:58.950 回答
0

您可以使用块来更好地控制预期的参数,更多信息: 参数匹配器

于 2012-08-20T11:34:05.203 回答
0

要扩展已接受的答案,可以使用参数匹配器执行以下操作:

expect(controller).to receive(:authorize!).with do |symbol, received_user|
  expect(symbol).to eq :create
  expect(received_user).to be_a User
  expect(received_user.account).to eq account
end
于 2014-11-21T04:21:18.343 回答