使用RSpec测试动态页面标题

时间:2015-07-21 01:45:36

标签: ruby-on-rails ruby rspec

我最近更新了静态文本中的页面标题,以便从我的应用页面呈现动态变量。例如:

静态:

        @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_count_down);



//        if (savedInstanceState != null){
//
//        }

        titleTextView = (TextView)findViewById(R.id.titleTextView);
        timeTextView = (TextView)findViewById(R.id.timeTextView);


        Bundle getAlarmInfo = getIntent().getExtras();
        titleOfAlarm = getAlarmInfo.getString("Title");
        totalTime = getAlarmInfo.getString("totalTime");

         number = new BigDecimal(totalTime).toBigInteger();


        actualTimeFiniliazedInMilliSeconds = number.intValue();
        titleTextView.setText(titleOfAlarm);

//        countDown = new CountDownTimer(actualTimeFiniliazedInMilliSeconds, timeInterval);

//        new UpdateCountDownTime().execute();


        countDown = new CountDownTime(actualTimeFiniliazedInMilliSeconds, timeInterval);
        countDown.start();
//        startService(new Intent(getApplicationContext(), CountDown.class));

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_count_down, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }


    public class CountDownTime extends CountDownTimer {


        /**
         * @param millisInFuture    The number of millis in the future from the call
         *                          to {@link #start()} until the countdown is done and {@link #onFinish()}
         *                          is called.
         * @param countDownInterval The interval along the way to receive
         *                          {@link #onTick(long)} callbacks.
         */
        public CountDownTime(long millisInFuture, long countDownInterval) {
            super(millisInFuture, countDownInterval);
        }

        @Override
        public void onTick(long millisUntilFinished) {



            long millis = millisUntilFinished;
            hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis),
                    TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
                    TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));


            timeTextView.setText(hms);
        }

        @Override
        public void onFinish() {
            Intent goBack = new Intent(CountDownAct.this, ListOfAlarms.class);
        startActivity(goBack);
            finish();
        }




    }

    @Override
    protected void onPause() {
        super.onPause();
        timeTextView.setText(hms);





    }



//    public class CountDown extends Service{
//
//        public  CountDown () {
//
//        }
//
//        @Override
//        public IBinder onBind(Intent intent) {
//            return null;
//        }
//
//        @Override
//        public void onCreate() {
//            super.onCreate();
//
//            countDown = new CountDownTime(actualTimeFiniliazedInMilliSeconds, timeInterval);
//            countDown.start();
//        }
//    }

动态:

<% title "Job" %>

我的旧RSpec测试非常简单:

<% title "Job in #{@job.address.state}" %>

我的页面标题帮助器如下所示:

it 'can see jobs page' do
  expect(page).to have_title('Job')
end

使用RSpec测试动态页面标题的最佳方法是什么?我试图使用包含的匹配器来测试页面标题字符串是否包含# Page title helper def title(page_title) content_for (:title) { page_title } end def yield_or_default(section, default = "") content_for?(section) ? content_for(section) : default end 但是无法使其工作。

1 个答案:

答案 0 :(得分:0)

我会很难编码你的期望。这样,您就不会测试两次以相同的方式编写相同方法链的能力,而是测试用户将看到的页面上实际打印的内容。

it 'can see jobs page' do
  expect(page).to have_title('Job in Alaska')
end

如果由于某种原因你没有正确调用这些方法,那么这个测试就会中断,你就会确切地知道要修复什么。如果这似乎很难做到,请记住您可以使用工厂或将测试中的地址状态设置为您需要的地址。

相关问题