Uploaded image for project: 'Moodle'
  1. Moodle
  2. MDL-53012

Behat: Add step to run scheduled task

    XMLWordPrintable

Details

    • MOODLE_29_STABLE
    • MOODLE_29_STABLE, MOODLE_30_STABLE
    • MDL-53012-master
    • Hide

      This test introduces a new Behat step. To check it:

      1. Visit the 'Scheduled tasks' page (under Site settings / Server) on your Behat instance and look at the last run time for the task "core\task\completion_regular_task". Note the time down.
      2. Run behat with --tags=core_badges --name="Award badge on course completion"
        1. EXPECTED: The Behat test should pass (and incidentally, about a minute faster than it used to)
      3. Visit the 'Scheduled tasks' page (under Site settings / Server) on your Behat instance and look at the last run time for the task "core\task\completion_regular_task"
        1. EXPECTED: The task should show that it ran recently, whereas all the other tasks didn't run yet.
      Show
      This test introduces a new Behat step. To check it: Visit the 'Scheduled tasks' page (under Site settings / Server) on your Behat instance and look at the last run time for the task "core\task\completion_regular_task". Note the time down. Run behat with --tags=core_badges --name="Award badge on course completion" EXPECTED: The Behat test should pass (and incidentally, about a minute faster than it used to) Visit the 'Scheduled tasks' page (under Site settings / Server) on your Behat instance and look at the last run time for the task "core\task\completion_regular_task" EXPECTED: The task should show that it ran recently, whereas all the other tasks didn't run yet.

    Description

      Running cron tasks is only currently possible with the 'And I trigger cron' step.

      This step:

      • Cannot be used more than once within a Behat scenario (the second time it won't do anything, because cron and/or the required task already ran)
      • Is slower than necessary as it runs many tasks
      • Means that tests may fail if an unrelated plugin breaks an unrelated cron task

      As a result, it's frequently necessary to create custom tasks for a particular plugin that either mess about with the database in order to ensure a task will run on next cron, or else manually run an individual task.

      Rather than doing all these custom tasks it would be a lot nicer to have a built-in step that does it. I'll write the code for this and see what people think.

      (Obviously this is just something I'd like rather than something we need; creating lots of tasks in all our plugins to do this is a successful workaround.)

      The disadvantage of this is that running a single task is slightly less 'realistic' than running the entire cron, but I think that's a fairly limited disadvantage so it would at least be nice to have the option. In addition, running cron in the browser window is not really a realistic situation because it normally runs in the background - using this step, you have the advantage of being able to run a cron task without a user necessarily having to log out and in again, which may actually provide more realistic testing of some situations.

      Note: As this is a Behat step change, I am submitting all supported branches.

      Attachments

        Issue Links

          Activity

            People

              quen Sam Marshall
              quen Sam Marshall
              Rajesh Taneja Rajesh Taneja
              Dan Poltawski Dan Poltawski
              Andrew Lyons Andrew Lyons
              Andrew Lyons, Huong Nguyen, Jun Pataleta, Michael Hawkins, Shamim Rezaie, Simey Lameze, Stevani Andolo
              Votes:
              0 Vote for this issue
              Watchers:
              6 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:
                14/Mar/16