在rspec(1.2.9)中,指定一个对象每次都会收到对一个方法的多次调用的正确方法是什么?我问是因为这个令人困惑的结果:describeObjectdoit"passes,asexpected"dofoo=mock('foo')foo.should_receive(:bar).once.ordered.with(1)foo.should_receive(:bar).once.ordered.with(2)foo.bar(1)foo.bar(2)endit"fails,asexpected"dofoo=mock('foo')foo.should_receive(:bar).once.o
在rspec中,您可以创建一个mock或一个double。这两个似乎几乎是同一件事,我在文档中找不到任何可以消除它们歧义的内容。有什么区别? 最佳答案 mock和stub都是更通用的double的别名。与context和describe一样,它们可以互换使用,以使规范的意图更加清晰。这在TheRSpecBook中有更详细的描述。. 关于ruby-on-rails-在RSpec中,mock和double之间有什么区别?,我们在StackOverflow上找到一个类似的问题:
我正在尝试检查我的RESTfulController中的新操作是否设置了所需对象类型的实例变量。看起来很典型,但执行起来有问题客户端Controllerdefnew@client=Client.newend测试describe"GET'new'"doit"shouldbesuccessful"doget'new'response.shouldbe_successendit"shouldcreateanewclient"doget'new'assigns(:client).should==Client.newendend结果......'ClientsControllerGET'new'
假设我有以下规范:describeThingdoit'canreaddata'do@data=get_data_from_file#['42','36']expect(@data.count).toeq2endit'canprocessdata'doexpect(@data[0].to_i).toeq42#Failsbecause@dataisnilendend我想要的只是在给定的describe或context中共享一个变量。我会在一个示例中写一个值,然后在另一个示例中读取它。我该怎么做? 最佳答案 你应该使用before(:ea
假设您的一个RubyonRails应用程序中有一个ActiveRecord::Observer-您如何使用rSpec测试这个观察器? 最佳答案 您走在正确的rails上,但我在使用rSpec、观察者和模拟对象时遇到了许多令人沮丧的意外消息错误。当我对我的模型进行规范测试时,我不想在我的消息期望中处理观察者行为。在您的示例中,在不知道观察者将要对其执行的操作的情况下,没有一种真正好的方法可以在模型上指定“set_status”。因此,我喜欢使用"NoPeepingToms"plugin.根据上面的代码并使用NoPeepingToms插
我使用guard-rspec在我的文件更改时自动运行必要的rspec测试,我喜欢它的工作方式。但是,当我调试包含多个测试的文件时,有时我只想重新运行单个测试。例如,从命令行使用rspec:rspecspec/requests/my_favorite_spec.rb:100这将仅运行my_favorite_spec.rb中第100行的单个规范。我尝试将以上内容输入守卫控制台,但它只是运行了所有测试,就好像我刚刚按下回车键一样。守卫控制台中是否有另一种语法来运行单个规范? 最佳答案 您必须参数化您的spec/spec_helper.rb
我是模拟对象的新手,我正在尝试学习如何在RSpec中使用它们。有人可以发布有关如何使用RSpec模拟对象API的示例(helloRSpecMock对象世界类型示例)或链接(或任何其他引用)吗? 最佳答案 这是我为Rails应用程序中的Controller测试所做的简单模拟示例:before(:each)do@page=mock_model(Page)@page.stub!(:path)@page.stub!(:find_by_id)@page_type=mock_model(PageType)@page_type.stub!(:na
将Rspec与FactoryGirl一起使用。尝试检查在我的Controller中分配了哪些数据(并对其进行测试)。我读过的每篇文章都说我应该能够从assigns()中得到一些东西,但它一直返回nillControllerdefindex@stickies=Sticky.where(:user_id=>current_user.id)end规范it"shouldassignstickies"dofoo=assigns(:stickies)puts"foo=#{foo}"end输出foo=我是否使用了错误的语法?有一个更好的方法吗?谢谢!! 最佳答案
在rspec文档中说明我应该使用double方法来创建测试替身。但我可以看到,即使我不使用double,它也能正常工作。不使用double有什么问题吗?另外,如果我不使用doubleMyClass如何获取stub和其他rspec方法?在rspec中运行时,它们是否可用于所有对象?require'spec_helper'classMyClassdefself.runnew.executeenddefexecute'foo'endenddescribeMyClassdoit'shouldstubinstancemethod'doobj=MyClass.newobj.stub(:execut
有没有办法在rspec场景中stubKernel.sleep? 最佳答案 如果你在一个对象的上下文中调用sleep,你应该把它放在对象上,像这样:classFoodefself.some_methodsleep5endendit"shouldcallsleep"doFoo.stub!(:sleep)Foo.should_receive(:sleep).with(5)Foo.some_methodend关键是,在调用sleep的上下文中将sleep存入任何“self”。 关于ruby-RS