我有一个由第三方处理的特定模拟.我只想检查是否已返回相同的模拟.
但是,第三方调用数组方法并保存我的测试并不真正关心的方法.有没有办法告诉我的mock它希望/ stub所有方法都用于特定的模拟实例?
例如.
user = mock(User)
user.stub_all
Run Code Online (Sandbox Code Playgroud)
谢谢!
编辑
有关该问题的更多信息:
测试:
it "creating an invitation should return invitation" do
invitation = mock_model(Invitation)
invitation.stub(:[]=)
invitation.stub(:save)
Invitation.stub(:create).and_return(invitation)
@user.create_invitation
@user.create_invitation.should == invitation
end
Run Code Online (Sandbox Code Playgroud)
正在测试的代码:
def create_invitation
invitation = Invitation.create
self.invitations.push(invitation)
return invitation
end
Run Code Online (Sandbox Code Playgroud)
我需要模拟以下与我测试的内容没有直接关系的内容:
invitation.stub(:[]=)
invitation.stub(:save)
Run Code Online (Sandbox Code Playgroud) 此问题先前已报告过,但我仍无法找到解决方法.
我已将插件Devise安装到我的新RoR项目中.当我点击注册链接时,我被重定向到以下路线:
HTTP://本地主机:3000 /用户/注册/ sign_up
但是,我收到以下错误:
undefined method `user_registration_path' for #<#<Class:0x007fd5d3503d58>:0x007fd5d3b0dcd0>
Run Code Online (Sandbox Code Playgroud)
提取的来源(第5行):
2: <h1>Sign up</h1>
3: </div>
4:
5: <%= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
6: <%= f.error_notification %>
7:
8: <div class="inputs">
Run Code Online (Sandbox Code Playgroud)
我的路线产生以下内容:
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session GET /users/sign_out(.:format) devise/sessions#destroy
password POST /users/password(.:format) devise/passwords#create {:name_prefix=>:user}
new_password GET /users/password/new(.:format) devise/passwords#new {:name_prefix=>:user}
edit_password GET /users/password/edit(.:format) devise/passwords#edit {:name_prefix=>:user}
PUT /users/password(.:format) devise/passwords#update {:name_prefix=>:user}
POST /users/registration(.:format) devise/registrations#create {:name_prefix=>"user_registration"}
new GET /users/registration/sign_up(.:format) devise/registrations#new {:name_prefix=>"user_registration"}
edit …Run Code Online (Sandbox Code Playgroud) 我意识到以下几点:
user1 = User.create - creates a model with id 1 and age is 0
same_user = User.find(1)
same_user.update_attributes(:age => 18)
p same_user.age # prints out 18
p user1.age # prints out 0
Run Code Online (Sandbox Code Playgroud)
为什么现有属性不从数据库中获取值?
我是MVC .NET的新手(我之前曾在Ruby On Rails上工作).
我想知道如何编写单元测试来检查正确的参数是否传递到视图中.
public ActionResult Users()
{
var users = userManager.GetUsers();
return View(users);
}
Run Code Online (Sandbox Code Playgroud)
如何测试View已与用户列表一起传递?我只是模拟View静态方法还是有更好的方法?
谢谢!
在编写和测试python方法时,我目前正在使用以下方法:
import foo as f
bar = f.bar()
bar.runMyMethodAndSeeIfItWorks()
Run Code Online (Sandbox Code Playgroud)
如果我在我的方法中更改某些内容,并且需要重新测试它,则必须执行以下操作:
f = reload(foo)
bar = f.bar()
bar.runMyMethodAndSeeIfItWorks()
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一个更简单的方法
目前我正在使用jQuery来选择我的索引页面应该加载什么,这取决于是否设置了cookie.
例如,如果设置了cookie,则index.html的body标签应加载hasCookie.html,如果未设置cookie,则加载noCookieSet.html.
我的索引页面目前有:
load user scripts
load styling scripts
<html><body></body></html>
Run Code Online (Sandbox Code Playgroud)
用户脚本具有检查cookie是否已设置的代码.如果是,我使用jQuery的加载将内容加载到正文中:
$(document.body).load('hasCookie.html')
Run Code Online (Sandbox Code Playgroud)
但是,由于这是异步执行的,因此在更新body标记之前已加载样式脚本,因此未对样式进行样式设置.
有没有办法同步加载,或者我应该以错误的方式接近这个?
编辑:如果它有帮助,样式脚本基本上是jQueryUI
根据我的阅读,我可以使用以下代码响应json请求:
respond_to do |format|
format.json { render json: t.response }
end
Run Code Online (Sandbox Code Playgroud)
我的问题是t.response已经是json格式 - 我认为我的应用程序正在破解,因为渲染json:将它重新转换为json.我该如何避免这种情况,只需返回t.response即可.
请注意,如果我只是将t.response作为控制器中的最后一行,则会呈现相应的视图 - 这显然不是json.
谢谢!
编辑:我试图让这个工作,所以我可以通过tropo发送短信.如果您之前使用过tropo,您对如何正确回复tropo有任何建议吗?
当我尝试发出json post请求时出现以下错误:
REXML::ParseException (The document "{\"user\":1,\"email\":\"some@email.com\"}:" does not have a valid root):
Run Code Online (Sandbox Code Playgroud)
不知道从哪里开始.
我的标题看起来像这样:
Accept:application/json, text/javascript, */*; q=0.01
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:38
Content-Type:application/x-www-form-urlencoded
Cookie:_washapp_session=SOME_COOKIE_STRING
Host:myapp.herokuapp.com
Origin:http://myapp.herokuapp.com
Referer:http://myapp.herokuapp.com/user/1/add_friends
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5
X-CSRF-Token:k5bxjBJ3SCMhe1ILfChoiy6qwkYfVsg0JYZV9KDnwIg=
X-Requested-With:XMLHttpRequest
Run Code Online (Sandbox Code Playgroud) 我有一个使用System.Func表达式的测试.它应该非常简单,但测试仍然失败.
测试:
[TestMethod]
public void GetUser()
{
var username = "john@resilientplc.com";
var user = new User() { UserId = 1, Username = username, Password = "123456789" };
someDataMock.Setup(s => s.GetUser(p => p.UserId == 1)).Returns(user);
var result = userProfileModel.GetUser(user.UserId);
Assert.AreEqual(user, result);
}
Run Code Online (Sandbox Code Playgroud)
实现UserProfileModel:
public User GetUser(long userId)
{
return someDataMock.GetUser(u => u.UserId == UserId);
}
Run Code Online (Sandbox Code Playgroud)
错误:
System.NotSupportedException:不支持的表达式:p =>(p.UserId == 1)
知道我的测试不正确吗?
我正在写一个rspec测试 - 由于某种原因,我被告知方法any_instance是未定义的.我很惊讶,因为我在我的一个控制器rspec文件中有一个非常相似的期望 - 它工作正常.任何想法为什么会发生这种情况?
require 'spec_helper'
describe Subscriber do
it {should belong_to :user}
describe "send_message should use mobile to send message" do
subscriber = Subscriber.new(:number => "123")
Mobile.any_instance.should_receive(:send_sms).with("123")
subscriber.send_message("hello!")
end
end
Run Code Online (Sandbox Code Playgroud)
错误
/subscriber_spec.rb:9:in `block (2 levels) in <top (required)>':
undefined method `any_instance' for Mobile:Class (NoMethodError)
Run Code Online (Sandbox Code Playgroud)
我的rspec版本(取自我的gemfile)
gem"rspec-rails","> = 2.11.0",:group => [:development,:test]
谢谢!
json ×2
rspec ×2
stubbing ×2
unit-testing ×2
ajax ×1
attributes ×1
c# ×1
class ×1
command-line ×1
controllers ×1
devise ×1
html ×1
javascript ×1
jquery ×1
load ×1
mocking ×1
module ×1
moq ×1
mstest ×1
post ×1
python ×1
reload ×1
rexml ×1