【问题标题】:Testing view controllers in storyboards in RubyMotion在 RubyMotion 的故事板中测试视图控制器
【发布时间】:2013-12-05 13:35:20
【问题描述】:

我正在使用情节提要和 RubyMotion。在我的规范中,我有以下内容:

describe "SignUp scene" do

  tests SignUpFacebook, :storyboard => 'LoginStoryboard', :id => 'SignUp'

  it "some test" do
    tap 'FirstName'
    # some test here      
  end

end

在我的视图控制器中

class SignUpFacebook < UIViewController

  def viewWillAppear animated
    super
    self.navigationController.setNavigationBarHidden (true, animated:false)
  end

  def viewWillDisappear animated
    super
    self.navigationController.setNavigationBarHidden (false, animated:false)
  end

  #some code to be tested
end

当我“rake spec”时,我得到了错误:

[ERROR: NoMethodError - undefined method `setNavigationBarHidden' for nil:NilClass]

所以,navigationController 是零。我错过了什么吗?或者,任何人都可以建议一种方法来测试引用导航控制器的视图控制器吗?此外,用于测试控制器是否希望在某些条件下执行 segue。我可以使用一些模拟或存根吗?

【问题讨论】:

  • tests 方法创建一个新的 UIWindow 并将其上的根视图控制器设置为您正在测试的视图控制器。另外,如果您要隐藏导航栏,为什么会在那里?可能改用模态表示模型。 self.presentViewController(@sign_up_facebook_controller, animated:true, completion:nil)
  • 你可以从显示它的视图控制器中调用它。
  • 是的,对于我给出的例子,你的建议可以避免这个问题。但是,我在情节提要中有其他控制器可以自定义 NavigationBarButtonItems,所以我仍然会遇到同样的错误。我找到了一种现在可以使用的方法(见下文)。不过感谢您的评论,这增加了我对正在发生的事情的理解。

标签: unit-testing rubymotion


【解决方案1】:

好的,我找到了一个方法示例,它覆盖了返回控制器的(macbacon?)方法。我已经在此处加载了控制器并设置了导航控制器,以便现在运行测试。在每个测试运行之前,事件的顺序是:

  1. 输出测试“it”描述
  2. 调用内置的“控制器”方法来实例化视图控制器(我已经覆盖了下面的方法)
  3. 测试系统一直等到视图加载完成(因此在 viewDidLoad 之前需要的任何依赖注入都必须在“控制器”方法中完成)
  4. 测试系统调用“before do .. end”代码
  5. 测试系统运行测试
  def controller
    unless @controller
          storyboard = UIStoryboard.storyboardWithName("LoginStoryboard", bundle:nil)
          @controller = storyboard.instantiateViewControllerWithIdentifier('SignUpFacebook')
          appDelegate = UIApplication.sharedApplication.delegate
          appDelegate.setWindow UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds)
          appDelegate.window.rootViewController = UINavigationController.alloc.initWithRootViewController @controller
    end
    @controller
  end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 2012-02-12
    相关资源
    最近更新 更多