我不能在我的rspect测试中看到在控制器动作中创建的实例变量吗?
y1=wavread('E:\sound\one.wav');
y2=wavread('E:\sound\two.wav');
y3=wavread('E:\sound\three.wav');
y4=wavread('E:\sound\four.wav');
t=input('prompt:');
if t==1
sound(y1,40000);
elseif t==2
sound(y2,40000);
elseif t==3
sound(y3,40000);
elseif t==4
sound(y4,40000);
else
disp('wrong input');
end
-
# /app/controllers/widget_controller.rb
...
def show
@widget = ...
puts "in controller: #{@widget}"
end
...
这是我运行该规范时得到的输出:
# /spec/controllers/widget_controller_spec.rb
RSpec.describe WidgetController, type: :controller do
...
describe "GET #show" do
it "assigns the requested widget as @widget" do
get :show, { :id => 1 } # this is just an example - I'm not hardcoding the id
puts "in spec: #{@widget}"
end
end
...
我认为我应该在我的控制器规范中访问@widget是错误的吗?
答案 0 :(得分:18)
使用Public Class Form1
Private Sub TextBox3_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox3.KeyPress
If Not Char.IsNumber(e.KeyChar) And Not e.KeyChar = Chr(Keys.Back) And Not e.KeyChar = Chr(Keys.Delete) Then
e.Handled = True
MessageBox.Show("numbers only", "baleted")
End If
End Sub
End Class
方法:
assigns
当然,您可以根据需要检查it "assigns the @widget"
expect(assigns(:widget)).not_to be_nil
end
,但是如果没有看到您提供的控制器代码中的widget
,我只是检查它是否为@widget
如果您想要nil
小部件,就像在您的示例中一样,只需使用puts
打印它
assigns
答案 1 :(得分:7)
在Rails 5中,assigns
现已被拆分为新的rails-controller-testing
宝石。
您可以安装gem继续使用assigns
,也可以使用rails-controller-testing
gem内部使用的内容,@controller.view_assigns[]
。
答案 2 :(得分:4)
#assigns已过时。这是一种避免引入rails-controller-testing
gem的解决方案
尽管可以code smell来测试控制器中的实例变量,但是要升级较旧的应用程序,您可以利用#instance_variable_get。
Rspec示例:
expect(@controller.instance_variable_get(:@people).first.id).to eq(person.id)