[develop branch] AttributeError: 'BOMItem' object has no attribute 'operation'

Both of these tests raise an error (the same one) when run:

bench run-tests --doctype ‘BOM’
bench run-tests --doctype ‘Journal Entry’

(env) frappe@ubuntu:~/frappe-bench$ bench run-tests --doctype ‘Journal Entry’
Traceback (most recent call last):
File “/usr/lib/python2.7/runpy.py”, line 174, in _run_module_as_main
main”, fname, loader, pkg_name)
File “/usr/lib/python2.7/runpy.py”, line 72, in _run_code
exec code in run_globals
File “/home/frappe/frappe-bench/apps/frappe/frappe/utils/bench_helper.py”, line 97, in
main()
File “/home/frappe/frappe-bench/apps/frappe/frappe/utils/bench_helper.py”, line 18, in main
click.Group(commands=commands)(prog_name=‘bench’)
File “/home/frappe/frappe-bench/env/local/lib/python2.7/site-packages/click/core.py”, line 722, in call
return self.main(*args, **kwargs)
File “/home/frappe/frappe-bench/env/local/lib/python2.7/site-packages/click/core.py”, line 697, in main
rv = self.invoke(ctx)
File “/home/frappe/frappe-bench/env/local/lib/python2.7/site-packages/click/core.py”, line 1066, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File “/home/frappe/frappe-bench/env/local/lib/python2.7/site-packages/click/core.py”, line 1066, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File “/home/frappe/frappe-bench/env/local/lib/python2.7/site-packages/click/core.py”, line 895, in invoke
return ctx.invoke(self.callback, **ctx.params)
File “/home/frappe/frappe-bench/env/local/lib/python2.7/site-packages/click/core.py”, line 535, in invoke
return callback(*args, **kwargs)
File “/home/frappe/frappe-bench/env/local/lib/python2.7/site-packages/click/decorators.py”, line 17, in new_func
return f(get_current_context(), *args, **kwargs)
File “/home/frappe/frappe-bench/apps/frappe/frappe/commands/init.py”, line 25, in _func
ret = f(frappe._dict(ctx.obj), *args, **kwargs)
File “/home/frappe/frappe-bench/apps/frappe/frappe/commands/utils.py”, line 406, in run_tests
ui_tests = ui_tests, doctype_list_path = doctype_list_path, failfast=failfast)
File “/home/frappe/frappe-bench/apps/frappe/frappe/test_runner.py”, line 66, in main
ret = run_tests_for_doctype(doctype, verbose, tests, force, profile)
File “/home/frappe/frappe-bench/apps/frappe/frappe/test_runner.py”, line 144, in run_tests_for_doctype
make_test_records(doctype, verbose=verbose, force=force)
File “/home/frappe/frappe-bench/apps/frappe/frappe/test_runner.py”, line 257, in make_test_records
make_test_records(options, verbose, force)
File “/home/frappe/frappe-bench/apps/frappe/frappe/test_runner.py”, line 257, in make_test_records
make_test_records(options, verbose, force)
File “/home/frappe/frappe-bench/apps/frappe/frappe/test_runner.py”, line 257, in make_test_records
make_test_records(options, verbose, force)
File “/home/frappe/frappe-bench/apps/frappe/frappe/test_runner.py”, line 258, in make_test_records
make_test_records_for_doctype(options, verbose, force)
File “/home/frappe/frappe-bench/apps/frappe/frappe/test_runner.py”, line 306, in make_test_records_for_doctype
frappe.local.test_objects[doctype] += make_test_objects(doctype, test_module.test_records, verbose, force)
File “/home/frappe/frappe-bench/apps/frappe/frappe/test_runner.py”, line 357, in make_test_objects
d.insert()
File “/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py”, line 249, in insert
self.run_post_save_methods()
File “/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py”, line 906, in run_post_save_methods
self.run_method(“on_update”)
File “/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py”, line 773, in run_method
out = Document.hook(fn)(self, *args, **kwargs)
File “/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py”, line 1049, in composer
return composed(self, method, *args, **kwargs)
File “/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py”, line 1032, in runner
add_to_return_value(self, fn(self, *args, **kwargs))
File “/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py”, line 767, in
fn = lambda self, *args, **kwargs: getattr(self, method)(*args, **kwargs)
File “/home/frappe/frappe-bench/apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py”, line 65, in on_update
self.update_exploded_items()
File “/home/frappe/frappe-bench/apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py”, line 455, in update_exploded_items
self.get_exploded_items()
File “/home/frappe/frappe-bench/apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py”, line 468, in get_exploded_items
‘operation’ : d.operation,
AttributeError: ‘BOMItem’ object has no attribute ‘operation’

The error may be from this Sept 6 commit [Enhance] Job Card (#15244) · frappe/erpnext@32dc3bf · GitHub

re this commit [Enhance] Job Card by rohitwaghchaure · Pull Request #15244 · frappe/erpnext · GitHub

edit:
fix PR fix ‘BOMItem’ object has no ‘operation’ attribute error in bench run-tests --doctype ‘BOM’ by clarkejj · Pull Request #15423 · frappe/erpnext · GitHub

for reference used this sql

ALTER TABLE tabBOM Item ADD COLUMN operation varchar(140);
ALTER TABLE tabBOM Item ADD FOREIGN KEY (operation) REFERENCES tabOperation(name);