Я использую тряску для тестового набора. Я имею множественные независимые тесты, представленные как набор Rule
. Если какое-либо из этих правил выходит из строя, тест не выполняется. Наконец, я создаю отчет, содержащий весь статус тестов.Обнаружить ошибки и создать отчет в случае сбоя при встряхивании.
Мои вопросы:
а) мне нужно определить, какой тест работает или не удается. На самом деле я обманываю, используя actionOnException
, но это много шаблонов в каждой команде в каждом правиле, и это сложно (я должен написать файл статуса или сыграть с IORef
, чтобы сохранить статус отказа).
b) Я хочу написать отчет Shake как часть моего окончательного отчета, однако shakeReport
не записывает файл в случае ошибки, мое единственное решение - снова запустить сборку с использованием --no-build --report out.html
, что не удобно.
Редактировать: На самом деле тесты действуют и строят свои зависимости. Построение примерно выглядит так:
main = do
-- when this fails, `dumpTests` is called,
-- but the shake report is not written
_ <- (try shakeMain) :: IO (Either SomeException())
-- This write my test report from the success informations it can gather
-- in the directory hierarchy
dumpTests
smakeMain = shakeArgs {shakeStaunch=True, shakeReport=["report.html"]} $ do
"tests" ~> need ["test1/done", "test2/done", ...]
-- this rules completly runs a test
"*/done" %> \done -> do
let test = takeDirectory done
-- clear all the leftover to be sure that there is nothing useless left. This is important because I use theses outputs to know which command succeeds or fails.
liftIO $ removeFiles test ["stdout.log", "*/image/*.exr", "*/image/*.png", "done"]
need [test </> "stdout.log"]
results <- getDirectoryFiles (test </> "image") ["*.exr"]
need (map (-<.> "png") results)
writeFile' done "done"
"*/stdout.log" %> \log -> do
let path = takeDirectory log </> "test"
need [path]
aCmd path -- this builds stdout.log and all exrs
"*/image/*.png" %> \png -> do
need [(png -<.> "exr")]
toExr png
спасибо.
Являются ли тесты в 'Action' или' IO'? Они сначала «строят» свои зависимости? –
Пример добавлен, все находится в 'Action' /' Rule', за исключением окончательного создания отчета. На самом деле я буду рад, что окончательное создание отчета в «Правиле», но мне нужен способ его создания, даже если его зависимости терпят неудачу. – Guillaum