我想将一些集成测试放在与控制器单元规格不同的目录中。但是,当我将spec文件移动到spec / integration时,它会失败:
ArgumentError:
bad argument(expected URI object or URI string)
spec在spec / controllers目录中正确传递。
以下是我的规格:
require 'spec_helper'
describe Users::LoginsController, type: :controller do
let!(:user) { User.create(email: 'test@test.com', password: 'test')
it 'logs in the user' do
post :create, email: 'test@test.com', password: 'test'
controller.current_user.should == user
end
end
我正在使用Rails 3.1.3,RSpec 2.7.0。
我必须使用任何技巧来实现这一目标吗?
答案 0 :(得分:2)
尝试指定类型:
describe ProductsController, type: :controller do
it 'can test #show' do
get :show
end
end
适用于Rails 3.2.11
答案 1 :(得分:0)
您必须执行以下操作:
describe Users::LoginsController do
controller_name 'users/logins'
... the rest of your spec here ...
end
我不完全确定嵌套语法,但至少需要指定controller_name
才能使其正常工作。
希望这会有所帮助。
答案 2 :(得分:0)
如果使用符号指定测试操作,则测试框架不喜欢它。
it 'logs in the user' do
post :create, email: 'test@test.com', password: 'test'
controller.current_user.should == user
end
变为
it 'logs in the user' do
post 'create', email: 'test@test.com', password: 'test'
controller.current_user.should == user
end
答案 3 :(得分:0)
这种方法适用于Rails 4和RSpec 2.14.7:
我的发现:
integration
。我需要浏览RSpec或Rails的源代码,但它似乎对运行控制器规范有不利影响。也许有这种知识的人可以插手来证实这一点。int
,导致出现问题,直到我在#describe
方法之后添加了“type :: controller”。int
目录中,允许我为所有解耦的快速规范创建一个unit
目录。如果这对你有用,请告诉我。
顺便说一下,我正在跑步:
全部在Mac OS X上。
答案 4 :(得分:0)
我遇到了同样的问题,最终只使用了网址
get "/users"
它并不干净但完成工作。我无法获得其他建议。
答案 5 :(得分:-9)
立即抓住机会摆脱控制器和集成规格。他们写作不必要地痛苦,而且与实现相结合。用黄瓜故事替换它们。你的生活会更容易......